Annotation
Annotationμ΄λ μ£Όμμ΄λ λ»μΌλ‘, μΈν°νμ΄μ€λ₯Ό κΈ°λ°μΌλ‘ ν λ¬Έλ²μ΄λ€. μ£Όμκ³Όλ κ·Έ μν μ΄ λ€λ₯΄μ§λ§ μ£Όμμ²λΌ μ½λμ λ¬μ ν΄λμ€μ νΉλ³ν μλ―Έλ₯Ό λΆμ¬νκ±°λ κΈ°λ₯μ μ£Όμ ν μ μλ€. λ ν΄μλλ μμ μ μ ν μλ μλ€.(Rentention Policy) Annotationμλ ν¬κ² μΈ κ°μ§ μ’ λ₯κ° μ‘΄μ¬νλ€. JDK μ λ΄μ₯λμ΄ μλ built-in annotationκ³Ό annotationμ λν μ 보λ₯Ό λνλ΄κΈ° μν annotationμΈ Meta-annotation κ·Έλ¦¬κ³ κ°λ°μκ° μ§μ λ§λ€μ΄ λ΄λ Custom Annotationμ΄ μλ€.
Annotationsμ metadataλ₯Ό ꡬ문과 μ°κ²°νλ ν΄λμ€ , λ©μλ λλ νλμ κ°μ Java ꡬ문μ μ μ©λλ λ°μ½λ μ΄ν°μ λλ€. μ΄λ¬ν λ°μ½λ μ΄ν°λ μμ±μ΄λ©° μ체μ μΌλ‘ μ΄λ€ μ½λλ μ€ννμ§ μμ§λ§ λ°νμ νλ μμν¬ λλ μ»΄νμΌλ¬μμ νΉμ μμ μ μννλ λ° μ¬μ©ν μ μμ΅λλ€. μ’ λ 곡μμ μΌλ‘ λ§νλ©΄ Java μΈμ΄ μ¬μ(JlS), μΉμ 9.7μμ λ€μκ΄ κ°μ μ μλ₯Ό μ 곡ν©λλ€.
An anotation is a marker which associates information with a program construct, but has no effect at run time
Built-in Annotation
@Override
λ©μλκ° μμλ λ©μλμ λμμ μ¬μ μνκ±°λ λ체ν¨μ λνλ΄λ λ° μ¬μ©λ©λλ€.
@FunctionalInterface
μΈν°νμ΄μ€μ νλμ λ©μλλ₯Ό λνλ΄λ λ° μ¬μ©λ©λλ€.
@SuppressWarnings
μ½λμ μΌλΆμμ νΉμ κ²½κ³ λ₯Ό 무μνκ³ μΆλ€λ κ²μ λνλ λλ€.
@SafeVarargs
varargs μ¬μ©κ³Ό κ΄λ ¨λ κ²½κ³ μ νμ μ μ©λ©λλ€.
@Deprecated
APIλ₯Ό λ μ΄μ μ¬μ©νμ§ μλλ‘ νμν μ μμ΅λλ€.
Meta-Annotations
@Target
μ μ©ν μ μλ λμμ μ€λͺ ν©λλ€.
@Retention
μ»΄νμΌλ¬μ μν΄ μ μ§λμ΄μΌ νλ κΈ°κ°μ μ€λͺ ν©λλ€.
RetentionPolicy.SOURCE β μ»΄νμΌλ¬μ λ°νμ λͺ¨λμμ λ³Ό μ μμ΅λλ€.
RetentionPolicy.CLASS β μ»΄νμΌλ¬μμ λ³Ό μ μμ
RetentionPolicy.RUNTIME β μ»΄νμΌλ¬μ λ°νμμμ λ³Ό μ μμ΅λλ€.
@Inherited
μμ μ νμ μ μ©λλ κ²½μ° νμ μ νμ μν΄ μμλμ΄μΌ ν¨μ λνλ λλ€.
@Documented
κΈ°λ³Έμ μΌλ‘ Javaλ Javadocsμμ @Annotation μ¬μ©μ λ¬Έμννμ§ μμ΅λλ€.
κ·Έλ¬λ @Documented μ£Όμμ μ¬μ©νμ¬ Javaμ κΈ°λ³Έ λμμ λ³κ²½ν μ μμ΅λλ€.
@Repeatable
λμΌν 컨ν μ€νΈμμ μ¬λ¬ λ² μ μ©ν μ μμ λνλ λλ€. μ¦ ν΄λμ€λ λμΌν μ£Όμμ λ λ² μ΄μ μ μ©ν μ μμ΅λλ€.
λλ§μ μ΄λ
Έν
μ΄μ
λ§λ€κΈ° (@Component
)
@Component
)@Target({ElementType.TYPE}) // μ΄ μ΄λ
Έν
μ΄μ
μ νμ
λ 벨(ν΄λμ€, μΈν°νμ΄μ€, μ΄κ±°ν)μ μ μ©λ©λλ€.
@Retention(RetentionPolicy.RUNTIME) // μ΄λ
Έν
μ΄μ
μ λ³΄κ° λ°νμκΉμ§ μ μ§λ©λλ€, μ¦ μ€ν μκ° λμ μ 보μ μ κ·Όν μ μμ΅λλ€.
@Documented // μ΄λ
Έν
μ΄μ
μ λ³΄κ° JavaDocμ ν¬ν¨λμ΄ λ¬Έμνλ©λλ€.
@Indexed // μ€νλ§μ μ»΄ν¬λνΈ μ€μΊλ λ©μ»€λμ¦μ΄ μ΄ μ΄λ
Έν
μ΄μ
μ κ°μ§ ν΄λμ€λ₯Ό μ½κ² μΈλ±μ±νκ³ μ°Ύμ μ μλλ‘ ν©λλ€.
public @interface Component {
String value() default ""; // μ΄λ
Έν
μ΄μ
μ¬μ© μ μ νμ μΌλ‘ μ§μ ν μ μλ κ°, μ£Όλ‘ λΉμ μ΄λ¦μΌλ‘ μ¬μ©λ©λλ€.
}
Reference
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Java#annotation
https://dzone.com/articles/5-annotations-every-java-developer-should-know
https://dzone.com/articles/what-are-meta-annotations-in-java
https://www.baeldung.com/java-default-annotations
https://docs.oracle.com/javase/tutorial/java/annotations/predefined.html
Last updated
Was this helpful?