티스토리 뷰

Java & Kotlin

Java annotation

필자A 2022. 12. 10. 16:37

meta data : 데이터를 위한 데이터, 사진 데이터를 위한 시간, 장소, 플래시 유무등을 meta data라 말함

annotation : 주석이라는 사전적인 의미를 가지며 java에서 주석이라는 개념을 표현하기 위한 방식 중 하나

 

Java 5부터 제공되는 기능입니다.

데이터 유효성검사등을 제공하며, annotation을 잘 활용할 경우 코드가 깔끔해집니다.

 

 

annotation이 제공해주는 것

 

1. 코드 생성

2. 런타임 처리

3.컴파일러 지시문

 

 


Java 표준 주석 (built in annotation)

 

@Override

슈퍼클래스의 메서드를 재정의한 메서드라는 것을 알려줍니다.

compile때 @Override annotation이 설정된 method가 슈퍼클래스에서 찾을 수 없다면

컴파일이 불가능합니다.

 

@Deprecated

메서드 및 클래스를 더이상 사용하지 않는 것으로 표시합니다.

 

@SuppressWarnings

컴파일러의 경고를 억제합니다.

 

 


Meta Annotation

annotation을 위한 annotation입니다.

 

@Retention

 

@Retention이 부착된 Annotation이 삭제되는 시점을 결정합니다.

삭제되는 시점에 대한 정책은 'SOURCE, CLASS, RUNTIME' 3가지가 존재합니다.

 

1. SOURCE

compiler에 의해 삭제됩니다.

표식(@Override), 코드 치환용(Lombok library)으로 사용됩니다.

 

 

2. CLASS

compiler에 의해 기록되지만 .class 파일에만 존재합니다. runtime 시점에 접근이 불가능합니다. (compile)

maven/gradle로 받은 라이브러리는 class file(bytecode)만 포함됩니다. 

"SOURCE" 정책으로 설정된 메타데이터들은 사라지고 맙니다.

해당 부분을 인지하고 "SOURCE", "CLASS"를 적절하게 사용하면 좋을 것 같습니다.

 

 

3. RUNTIME

runtime 시점에도 유지되며 해당 annotaion정보에 접근이 가능합니다. (runtime)

reflection기술로 runtime때 annotation의 정보를 획득하여 사용합니다.

 

예시로 Spring framework의 @Controller같은 annotation입니다.

@Controller, @Service등 사용자가 만든 annotation기반 빈들도

Spring이 reflection기술을 사용해 @Controller, @Service 등을 container에 등록합니다.

 

RUNTIME으로 정책이 설정되어있지 않다면 runtime때 annotation이 사라지고 맙니다.

 

 

@Target

annotation이 적용될수 있는 위치를 표현합니다.

 

@Documented

문서에도 annotation의 정보가 표현됩니다.

 

@Inherited

자식 클래스에 annotation의 정보가 상속됩니다.

 

@Repeatable

반본적으로 annotation을 설정할 수 있게 됩니다.

 

 


반응형

'Java & Kotlin' 카테고리의 다른 글

Java Buffer  (0) 2022.12.11
Java Stream  (0) 2022.12.10
Java enum  (0) 2022.11.02
Java Thread  (0) 2022.10.30
Java Exception  (0) 2022.09.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함