Week12(Annotation)
μ λ
Έν
μ΄μ
μ΄λ
Annotationμ μ£Όμ μ΄λΌλ μλ―Έλ₯Ό κ°μ§κ³ μλ€. νμ§λ§ /λ /*μ κ°μ μ£Όμκ³Όλ νμ€ν λ€λ₯΄λ€
μ»΄νμΌ κ³Όμ μμ μ½λλ₯Ό μ΄λ»κ² μ»΄νμΌ ν κ²μΈμ§, μ€ν κ³Όμ μμ μ½λλ₯Ό μ΄λ»κ² μ²λ¦¬ν κ²μΈμ§λ₯Ό μλ €μ£Όλ μ 보
annotationμ΄ λΆμ μ½λλ annotationμ κ΄ν μ λ³΄κ° κ΅¬νλ κ²μ λ°λΌμ μ°κ²°λλ λ°©ν₯μ΄ κ²°μ λλ€
μ 체 μμ€μ½λμμ λΉμ§λμ€ λ‘μ§μλ μν₯μ μ£Όμ§λ μμ§λ§ ν΄λΉ νκ²μ μ°κ²° λ°©λ²μ΄λ μμ€μ½λμ ꡬ쑰λ₯Ό λ³κ²½ν μ μλ€.
= μ΄ μμ±μ μ΄λ€ μ©λλ‘ μ¬μ©ν κ»μ§, μ΄ ν΄λμ€μκ² μ΄λ€ μν μ μ€κ»μ§λ₯Ό κ²°μ ν΄μ λΆμ¬μ£Όλ κ²
annotationμ μμ€μ½λμ λ©νλ°μ΄ν°λ₯Ό μ½μ νλ κ²μ΄κΈ° λλ¬Έμ μ μ΄μ©νλ€λ©΄ ꡬλ μ± λΏλ§ μλλΌ μ²΄κ³μ μΈ μμ€μ½λλ₯Ό ꡬμ±νλλ° λμμ μ€λ€
λ©ν λ°μ΄ν°λ -> λ°μ΄ν°λ₯Ό μν λ°μ΄ν°λ₯Ό μλ―Ένλ©°, λ°μ΄ν°μ λν μ€λͺ μ μλ―Ένλ λ°μ΄ν°(μμ μ μ 보λ₯Ό κ°μ§κ³ μλ λ°μ΄ν°)
μ¬μ©λ²
ν¨ν€μ§λͺ μ΄λ ν΄λμ€ μ μΈ, λ©μλ μ μΈ, νλ μ μΈ, μΈμκ° μ μΈ μμλ€κ°
@μ΄λ¦(μΈμ)
λ°©μμΌλ‘ λ£μ΄μ£Όκ³ λ§μ½ μΈμκ° μμκ²½μ°μλ (μΈμ) λΆλΆμ λΉΌκ³ μ¬μ©νλ κ²λ κ°λ₯νλ€
μ μΈλ°©λ²
@Retention()
@Target()
public @interface ExAnnotation{
//νμ
μμλͺ
() defaultκ°;
String value(); // Stringν κΈ°λ³Έ μμ
int value2() default 5; //intν μμ μ΄κΈ°κ° 5
}μ΄λ κ² annotationμ λ©€λ²λ₯Ό κ°μ§λ κ²μ΄ κ°λ₯νλ©°, νμ , μ΄λ¦, dafaultκ°μ μ€μ νλ κ²μ΄ κ°λ₯νλ€
λ§μ½ defaultκ°μ λ°λ‘ μ ν΄μ£Όμ§ μλλ€λ©΄ κΈ°λ³Έ μμκ° λλ€
μ¬μ©λ°©λ²
λ§μ½ annotation μμ μλ μμμ κ°μ defaultκ°μ΄ μ€μ λμ΄ μλ€λ©΄, κ°μ λ°λ‘ μ€μ νμ§ μμλ λμ§λ§(int) defaultκ°μ΄ μλ κ²½μ°μλ κ°μ μ€μ ν΄μ€μΌ ν¨(String)
νμ€ Annotation
@Override : λ©μλκ° overrideλμλμ§ νμΈνκ³ λ§μ½ λΆλͺ¨ ν΄λμ€λ ꡬνλ μΈν°νμ΄μ€μμ λ©μλλ₯Ό μ°Ύμ§ λͺ»νμ λ μ»΄νμΌ κ²½κ³ λ₯Ό λ°μμν¨λ€
@Deprecated : λ©μλμ λ§νΉμ ν΄λκ³ λ§μ½ λ©μλκ° μ¬μ©λμμ λ μ»΄νμΌ κ²½κ³ λ₯Ό μ€
@SafeVarargs : μλ° 7λΆν° κ°λ³μΈμ λ§€κ°λ³μλ₯Ό μ¬μ©ν λ©μλλ μμ±μλ₯Ό λΆλ₯΄λ κ²λ€μ κ²½κ³ λ€μ 무μ
@SurppressWarnings : annotation μΈμλ€ μμ μ»΄νμΌ μμ κ²½κ³ λ₯Ό μ»΄νμΌλ¬λ‘ νμ¬κΈ 무μνλλ‘ ν¨
@FunctionalInterface : μλ° 8λΆν° κΈ°λ₯μ μΈν°νμ΄μ€κ° λκΈ° μν΄ μλλ νμ μ μΈμ ꡬ체νν¨
@Retentionμ΄λ
μ΄λ μμ κΉμ§ Annotationμ λ©λͺ¨λ¦¬λ₯Ό κ°μ Έκ° κ±΄μ§ μ€μ νλ λΆλΆ
μ‘°κΈ λ μμ보기 μν΄μ λ΄λΆλ₯Ό λ€μ¬λ€ 보μλ€
annotation μ νμ΄ μλ annotationμ΄ λ³΄μ‘΄λλ κΈ°κ°μ λνλ
μΈμλ‘λ RetentionPolicyκ° λ€μ΄κ°κ² λλ€
μΈμλ‘ λ€μ΄κ°λ RetentionPolicyλ₯Ό μμ보기 μν΄ λ€μ λ λ΄λΆλ₯Ό λ€μ¬λ€λ΄€λ€
RetentionPolicyκ°μ λ£μ΄μ£Όλ©΄ κ·Έκ²μΌλ‘ annotationμ λ©λͺ¨λ¦¬ 보μ λ²μκ° κ²°μ λλ€
μμ
SOURCE : ν΄λΉ annotationμ λ©λͺ¨λ¦¬λ₯Ό μ»΄νμΌλ¬κ° λ²λ¦°λ€
CLASS : μ»΄νμΌλ¬κ° μ»΄νμΌμμλ annotationμ λ©λͺ¨λ¦¬λ₯Ό κ°μ Έκ°μ§λ§ μ€μ λ‘ λ°νμμμ μ¬λΌμ§λ€
RUNTIME : μ»΄νμΌλ¬μ μν΄μ ν΄λμ€ νμΌμ κΈ°λ‘λκ³ , λ°νμ μ JVMμ μν΄ μ μ§λλ€.
μ΄λ κ² μ¬μ©νκ³ RUNTIME μ리μ νμν μμλ€μ λ£μ΄μ μ¬μ©κ°λ₯
@Targetμ΄λ
annotationμ΄ μ μ©λ μμΉλ₯Ό κ²°μ
μ΄κ²λ λ΄λΆλ₯Ό λ€μ¬λ€λ³΄λ©΄ μ΄λ κ² μ€λͺ ν΄λμλ€.
μμμμ Retention μ²λΌ ElementTypeμ μμλ€μ μνλ λ§νΌ λ£μ μ μλ κ² μ²λΌ 보μΈλ€
λ€μ ElementTypeμ μ°Ύμ보μ
TYPE : νμ (ν΄λμ€, μΈν°νμ΄μ€, enum) μ μΈ μ μ¬μ©
FIELD : λ©€λ² λ³μ μ μΈ μ μ¬μ©(enum ν¬ν¨)
METHOD : λ©μλ μ μΈ μ μ¬μ©
PARAMETER : λ§€κ° λ³μ μ μΈ μ μ¬μ©
CONSTRUCTOR : μμ±μ μ μΈ μ μ¬μ©
LOCAL_VARIABLE : μ§μ λ³μ μ μΈ μ μ¬μ©
ANNOTATION_TYPE : Annotation type μ μΈ μ
PACKAGE : ν¨ν€μ§ μ μΈ μ
TYPE_PARAMETER : λ³μ νμ μ μΈ μ
TYPE_USER : νμ μ¬μ© μ
@Documentedμ΄λ
ννλ₯Ό κ°μ§λ annotationμ΄ javadoc κ°μ ν΄μ μν΄μ defaultλ‘ λ¬Έμν λλ κ²μ λνλ
=λ¬Έμμ μ λ³΄κ° ννλλ€λΌκ³ μκ°νλ©΄ λ λ―νλ€
μ λ
Έν
μ΄μ
νλ‘μΈμ
Annotation Processingμ΄λ? (from Stackoverflow)
-> μλ° μ»΄νμΌλ¬μ μ»΄νμΌ λ¨κ³μμ μ μ κ° μ μν annotationμ μμ€μ½λλ₯Ό λΆμνκ³ μ²λ¦¬νκΈ° μν΄ μ¬μ©λλ ν μ΄λ€. μ»΄νμΌ μλ¬λ μ»΄νμΌ κ²½κ³ λ₯Ό λ§λ€μ΄λ΄κ±°λ μμ€μ½λ(.java)μ λ°μ΄νΈμ½λ(.class)λ₯Ό λ΄λ³΄λ΄κΈ°λ νλ€
μ΄κ²μ κ°μ₯ λνμ μΈ μμλ lombokκ° μμΌλ©°
μ₯μ μ λ°νμ λΉμ©μ΄ μλ λ€λμ μ΄κ³
λ¨μ μ κΈ°μ‘΄μ ν΄λμ€ μ½λλ₯Ό λ³κ²½ν λλ λ΄λΆ ν΄λμ€λ₯Ό μ¬μ©ν΄μ κΈ°μ‘΄ μ½λλ₯Ό λ§μ§κΈ° λλ¬Έμ ν΄νΉμ λΉμ·νλ€
annotation processλ₯Ό μ§μ μμ±νκ±°λ λ§λ€μ΄μ§ annotation processorλ₯Ό νμΈνλ©΄ Abstract Processor ν΄λμ€λ₯Ό μμλ°λ κ²μ μ μ μλ€.
μ°Έκ³ μ¬μ΄νΈ
https://www.nextree.co.kr/p5864/
https://coding-factory.tistory.com/575
http://cris.joongbu.ac.kr/course/java/api/java/lang/annotation/Documented.html
Last updated
Was this helpful?