어노테이션 (Annotation)
- 프로그램의 코드에 메타데이터를 추가하는 기능을 제공하는 것
- 컴파일러 or 런타임 시점에 코드를 처리하는 도구들에게 추가적인 정보를 제공함
- 주로 클래스, 메서드, 변수, 매개변수 등에 부착해서 사용됨
- 형식 : @어노테이션(속성1=값1, 속성2=값2, ...)
- 코드 가독성 향상
- 자동화된 코드 생성, 테스트, 디버깅 등에 활용
# 빌트인 어노테이션 (Built-in Annotation)
- @Override
: 상위 클래스나 인터페이스의 메서드를 오버라이드함을 나타냄
- @Deprecated
: 해당 요소가 더 이상 사용되지 않음을 나타냄
- @SuppressWarnings
: 컴파일러의 경고를 무시하도록 지정함
# 메타 어노테이션 (Meta Annotation)
- @Retention
: 어노테이션의 유지 정책을 지정함 (소스, 클래스, 런타임)
→ 어노테이션의 수명 결정 (컴파일 시점까지 or 런타임 시점까지)
[옵션]
i. RetentionPolicy.SOURCE
: 소스 코드에서만 유지 / 컴파일 과정에서는 제거
ii. RetentionPolicy.CLASS
: 컴파일러에 의해 클래스 파일까지 유지 / 런타임 시 무시
iii. RetentionPolicy.RUNTIME
: 런타임 시에도 유지
→ 런타임 시에 리플렉션을 통해 어노테이션 정보를 읽을 수 있음
- @Target
: 어노테이션을 부착할 수 있는 대상을 지정함 (클래스, 메서드, 필드)
[옵션]
i. ElementType.TYPE
: 클래스, 인터페이스 (+어노테이션), 열거형(enum)
ii. ElementType.FIELD
: 필드 (인스턴스 변수)
iii. ElementType.METHOD
: 메서드
# 커스텀 어노테이션 (Custom Annotation)
- 개발자가 직접 정의한 어노테이션
- 애플리케이션에 맞는 사용자 정의 어노테이션을 만들 수 있음
커스텀 어노테이션 정의 방법
1 2 3 4 5 6 7 | @Retention(value = RetentionPolicy.RUNTIME) // 이 어노테이션의 수명을 런타임 시점까지 유지하도록 정의 @Target(ElementType.TYPE) //이 어노테이션을 클래스 레벨에서만 사용할 수 있도록 정의 public @interface 어노테이션명 { // 커스텀 어노테이션을 정의 String value() default ""; // 어노테이션 요소 정의, default로 기본값 } | cs |
커스텀 어노테이션 사용 방법
1 2 3 4 | @어노테이션명(value = "값") public class MyClass { // ... } | cs |
'Java > Base' 카테고리의 다른 글
[Java] 리플렉션 (Reflection) (0) | 2023.06.18 |
---|---|
[Java] JVM (Java Virtual Machine) (0) | 2023.06.18 |
[Java] Garbage Collection (0) | 2023.06.18 |
[Java] 객체 지향 프로그래밍 (OOP)과 SOLID 원칙 (0) | 2023.06.18 |
[Java] 데이터 형식 지정 (0) | 2023.04.20 |