@Override를 하는 이유
- 컴파일러가 애노테이션을 보고 메서드가 정확히 오버라이드 되었는지 확인한다.
오버라이딩 조건을 만족시키지 않으면 컴파일 에러를 발생시킨다. - 실수로 오버라이딩을 못하는 경우를 방지해준다.
- 필수는 아니지만 코드의 명확성을 위해 붙여주는 것이 좋다.
어노테이션
어노테이션 타입 정의와 적용
public @interface AnnotationName {
} // 이렇게 작성 후
@AnnotationName 형식으로 활용함
public @interface AnnotationName {
String prop1();
int prop2() default 1;
}
@AnnotationName(prop1 = "값")
@AnnotationName(prop1 = "값", prop2 = "값")
어노테이션 적용 대상
ElementType 열거 상수 | 적용 요소 |
TYPE | 클래스, 인터페이스, 열거 타입 |
ANNOTATION_TYPE | 어노테이션 |
FIELD | 필드 |
CONSTRUCTOR | 생성자 |
METHOD | 메소드 |
LOCAL_VARIABLE | 로컬 변수 |
PACKAGE | 패키지 |
@ TARGET
- 적용 대상을 지정할 때 사용
- TARGET의 기본 속성인 value는 ElementType 배열을 값으로 가짐
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface AnnotationName {
}
@AnnotationName // TYPE(클래스)에 적용
public class ClassName {
@AnnotationName // 필드에 적용
private String fieldName;
// @AnnotationName // Constructor가 없으므로 생성자에 적용 불가
public ClassName() { }
@AnnotationName // 메소드에 적용
public void methodName() { }
}
어노테이션 유지 정책
RentationPolicy 열거 상수 | 어노테이션 적용 시점 | 어노테이션 제거 시점 |
SOURCE | 컴파일할 때 적용 | 컴파일된 후에 제거됨 |
CLASS | 메모리로 로딩할 때 적용 | 메모리로 로딩된 후에 제거됨 |
RUNTIME | 실행할 때 작영 | 계속 유지됨 |
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Rentation(RentationPolicy.RUNTIME)
public @interface AnnotationName {
}
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] package 규칙 (+명명 규칙) (0) | 2024.03.30 |
---|---|
[Java] this 활용 추세 (0) | 2024.03.30 |
[Java] 생성자 (0) | 2024.03.30 |
[Java] 접근제어자 (0) | 2024.03.30 |
[Java] Encapsulation (0) | 2024.03.30 |