Skip to content

Latest commit

Β 

History

History
57 lines (43 loc) Β· 3.76 KB

README.md

File metadata and controls

57 lines (43 loc) Β· 3.76 KB

μ–΄λ…Έν…Œμ΄μ…˜μ΄λž€ μ‚¬μ „μ μœΌλ‘œλŠ” μ£Όμ„μ΄λΌλŠ” 의미둜, μ£Όμ„μ²˜λŸΌ μ½”λ“œμ— λͺ…μ‹œν•˜μ—¬ ν΄λž˜μŠ€μ— νŠΉλ³„ν•œ 의미λ₯Ό λΆ€μ—¬ν•˜κ±°λ‚˜ κΈ°λŠ₯을 μ£Όμž…ν•  수 μžˆλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.
μΈν„°νŽ˜μ΄μŠ€λ₯Ό 기반으둜 ν•œ 문법이며, Built-In Annotation, Meta Annotation, Custom Annotation μ„Έ μ’…λ₯˜λ‘œ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.

Built-In Annotation

Java에 λ‚΄μž₯λ˜μ–΄ μžˆλŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ 주둜 μ»΄νŒŒμΌλŸ¬μ—κ²Œ μœ μš©ν•œ 정보λ₯Ό μ œκ³΅ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

@Override // λ©”μ„œλ“œ μ•žμ—λ§Œ 뢙일 수 있으며 ν˜„μž¬ λ©”μ„œλ“œκ°€ Super 클래슀의 λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•œ λ©”μ†Œλ“œμž„μ„ μ»΄νŒŒμΌλŸ¬μ—κ²Œ λͺ…μ‹œν•©λ‹ˆλ‹€. μ˜€νƒ€ λ°œμƒ κ°€λŠ₯성을 μž‘μ•„μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.
@Deprecated // 더 이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ†Œλ“œλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
@SupressWarning // ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ˜λ„λ₯Ό μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ „λ‹¬ν•˜μ—¬ κ²½κ³ λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€.
@FunctionalInterface // ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λΌλŠ” 것을 μ•Œλ¦¬κ³  κ²€μ‚¬ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. 개발자의 μ‹€μˆ˜λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

Meta Annotation

μ–΄λ…Έν…Œμ΄μ…˜μ— μ‚¬μš©λ˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ˜ λ™μž‘ λŒ€μƒμ„ κ²°μ •ν•©λ‹ˆλ‹€.
주둜 μƒˆλ‘œμš΄ μ–΄λ…Έν…Œμ΄μ…˜μ„ μ •μ˜ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

@Target // μ–΄λ…Έν…Œμ΄μ…˜μ΄ μ μš©κ°€λŠ₯ν•œ λŒ€μƒμ„ μ§€μ •ν•˜λŠ”λ° μ‚¬μš©ν•©λ‹ˆλ‹€. μ—¬λŸ¬ 개 값을 지정할 λ•ŒλŠ” {}λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
@Retention // μ–΄λ…Έν…Œμ΄μ…˜μ΄ μœ μ§€λ˜λŠ” 기간을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. SOURCE / CLASS / RUNTIME
@Documented // μ–΄λ…Έν…Œμ΄μ…˜μ— λŒ€ν•œ 정보가 JavaDoc으둜 μž‘μ„±ν•œ λ¬Έμ„œμ— ν¬ν•¨λ˜λ„λ‘ ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ λŒ€λΆ€λΆ„μ˜ Built-In Annotation에 λΆ™μ–΄ μžˆμŠ΅λ‹ˆλ‹€. (@Override, @SuppressWarnings μ œμ™Έ)
@Inherited // μ–΄λ…Έν…Œμ΄μ…˜μ΄ μžμ† ν΄λž˜μŠ€μ—λ„ μƒμ†λ˜λ„λ‘ ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, 쑰상 ν΄λž˜μŠ€μ— 뢙이면 μžμ† ν΄λž˜μŠ€λ„ 이 μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 것과 같이 μΈμ‹λ©λ‹ˆλ‹€.
@Native // JVM이 μ„€μΉ˜λœ OS의 λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œμ— μ˜ν•΄ μ°Έμ‘°λ˜λŠ” μƒμˆ˜ ν•„λ“œμ— λΆ™μ΄λŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. λŒ€ν‘œμ μœΌλ‘œ Object 클래슀의 λ©”μ„œλ“œλ“€μ΄ λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œμ— ν•΄λ‹Ήλ˜λ©°, λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œμ™€ μžλ°”μ— μ •μ˜λœ λ©”μ„œλ“œλ₯Ό μ—°κ²°ν•˜λŠ” 것을 JNI(Java Native Interface)라고 ν•©λ‹ˆλ‹€.

Custom Annotation

직접 μ–΄λ…Έν…Œμ΄μ…˜ νƒ€μž…μ„ μ„ μ–Έν•˜λŠ” κ²ƒμœΌλ‘œ νŠΉλ³„ν•œ μ’…λ₯˜μ˜ μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€.
일반적인 μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έκ³Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ interface μ•žμ— @λ₯Ό λΆ™μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.
μ–΄λ…Έν…Œμ΄μ…˜ νƒ€μž…μ€ μ•”λ¬΅μ μœΌλ‘œ java.lang.annotation.Annotation을 ν™•μž₯ν•˜κΈ° λ•Œλ¬Έμ— extendsμ ˆμ„ κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ’‘ Marker Annotation
μš”μ†Œκ°€ ν•œ κ°œλ„ μ—†μœΌλ©° λ‹¨μˆœνžˆ ν‘œμ‹μœΌλ‘œμ„œ μ‚¬μš©λ˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, μ»΄νŒŒμΌλŸ¬μ—κ²Œ 의미λ₯Ό μ „λ‹¬ν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€.

πŸ’‘ Single-value Annotation
μš”μ†Œλ‘œ 단일 λ³€μˆ˜λ§Œμ„ κ°–λŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, 단일 λ³€μˆ˜λ°–μ— μ—†κΈ° λ•Œλ¬Έμ— κ°’λ§Œμ„ λͺ…μ‹œν•˜μ—¬ 데이터λ₯Ό 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

@interface MyAnnotation {
  String value();
}
@MyAnnotation("passed") // @MyAnnotation(value="passed")와 동일
class Newclass { ... }

πŸ’‘ Full Annotation
μš”μ†Œλ‘œ λ‘˜ μ΄μƒμ˜ λ³€μˆ˜λ₯Ό κ°–λŠ” μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, 데이터λ₯Ό λ°°μ—΄ μ•ˆμ— key-value의 ν˜•νƒœλ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.
- μš”μ†Œ νƒ€μž…μ€ Primitive Type, String, Enum, Annotation, Class만 ν—ˆμš©λ©λ‹ˆλ‹€. 각 μš”μ†ŒλŠ” 기본값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
- μš”μ†Œμ˜ () μ•ˆμ— λ§€κ°œλ³€μˆ˜λ₯Ό μ„ μ–Έν•  수 μ—†μŠ΅λ‹ˆλ‹€.
- μ˜ˆμ™Έλ₯Ό μ„ μ–Έν•  수 μ—†μŠ΅λ‹ˆλ‹€.
- μš”μ†Œλ₯Ό νƒ€μž… λ§€κ°œλ³€μˆ˜λ‘œ μ •μ˜ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

int count() default 1;