어노테이션은 메타데이터를 제공하는 특별한 형태의 문법
주로 컴파일러 지시, 런타임 동작제어, 문서화 등에 사용된다
특징
- 메타데이터 제공
코드에 부가적인 정보를 포함하지만 프로그램의 로직에는 직접적인 영향을 미치지 않는다 - 주석과는 다름
주석은 개발자를 위한 설명일뿐이지만, 컴파일러나 런타임 환경에서 사용된다 - 클래스, 메소드, 필드, 매개변수 등 다양한 위치에 적용 가능
클래스, 메서드, 변수, 생성자, 매개변수, 패키지 선언 등 여러 곳에 사용할 수 있다
기본문법
`@`기호로 시작한다
@AnnotationName
public class Main{}
- 어노테이션 정의
@interface 어노테이션이름 {}
- 어노테이션 사용
@어노테이션이름
public class MyClass {
// 클래스 내용
}
자바에서 제공하는 기본 어노테이션
1. 컴파일러 지시용
- `@Override` - 메소드가 부모 클래스의 메소드를 재정의하고 있다는 것을 명시
@Override
public String toString() {
return "MyClass";
}
- `@Deprecated` - 해당 요소가 더이상 사용되지 않음을 의미
@Deprecated
public void oldMethod() {
System.out.println("This method is deprecated.");
}
- `@SuppressWarnings` - 컴파일러 경고를 무시한다
@SuppressWarnings("unchecked")
List rawList = new ArrayList();
2. 런타임 처리용
- `@Retention` - 어노테이션의 유지 정책을 정의합니다.
- `SOURSE` : 컴파일 시 제거
- `CLASS` : 클래스 파일에 포함되지만 런타임에는 사용 불가
- `RUNTIME` : 런타임에도 유지 (리플렉션으로 접근 가능)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}
- `@Target` - 어노테이션을 적용할 위치를 제한합니다
- ElementType.TYPE - 클래스
- ElementType.METHOD - 메서드
- ElementType.FIELD - 필드
@Target(ElementType.METHOD)
public @interface MyAnnotation {
}
- `@Document` - 어노테이션이 JavaDoc에 포함되도록 설정함
@Documented
public @interface MyAnnotation {}
- `@Inherited` - 자식 클래스에 상속되도록 지정
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}
3. 마커 어노테이션
값이나 매개변수를 가지지 않는 어노테이션 (`@Override`)
커스텀 어노테이션 만들기
개발자는 자신만의 어노테이션을 정의할수 있다
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
String value() default "default";
}
public class Test {
@MyAnnotation(value = "Hello")
public void myMethod() {
System.out.println("My method!");
}
}
어노테이션의 활용
1. 프레임워크
- Spring : `@Controller`, `@Service`, `@Autowired` 등
- JPA : `@Entity`, `@Table`, `@Id` 등
2. 런타임 리플렉션
리플렉션을 사용하여 어노테이션을 읽고 동적으로 행동을 정의할 수 있다
Method method = Test.class.getMethod("myMethod");
MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
System.out.println(annotation.value());
어노테이션의 장점
- 코드 가독성 및 유지보수성 향상
- 반복적인 코드 제거
- 메타데이터 기반의 동적 처리 가능
어노테이션의 단점
- 과도하게 사용하면 코드가 복잡해질 수 있음
- 런타임 처리 시 성능 저하 가능
어노테이션은 자바 개발에서 필수적으로 이해하고 활용해야 할 강력한 도구입니다.
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[Java] 레이어드 아키텍처와 mvc (1) | 2024.12.15 |
---|---|
[Java] 명령형 , 선언형 프로그래밍 (0) | 2024.12.12 |
[Java] JDBC와 JPA (0) | 2024.12.11 |
[Java] 람다식 (0) | 2024.12.10 |
[Java] 스트림 (1) | 2024.12.09 |