728x90
주석(Comment) & 애너테이션(Annotation)
- 주석은 개발자의 입장에서 코드의 가독성을 높이고, 다른 개발자와의 협업에서 코드에 대한 설명을 제공하는 역할을 수행하지만, 애너테이션은 특정 코드를 사용하는 프로그램에게 정보를 전달한다. 쉽게 이야기하면 프로그램을 위한 주석이라고 할 수 있다.
애너테이션의 주요한 역할
- 컴파일러에게 문법의 에러 여부를 체크하도록 정보를 제공한다.
- 프로그램을 빌드할 때 코드를 자동으로 생성할 수 있게 정보를 제공한다.
- 런타임에 특정 기능을 실행하도록 정보를 제공한다.
애너테이션의 종류
표준 애너테이션 : 자바에서 기본으로 제공하는 애너테이션
표준 애너테이션 | 설명 |
@Override | 컴파일러에게 메서드를 오버라이딩 하는 것이라고 알림 |
@Deprecated | 기존의 필드나 메서드가 호환성 문제 등으로 삭제할 수 없어 남겨두고 새로운 것으로 대체된 경우, 기존의 것은 사용하지 않도록 알림 |
@FunctionalInterface | 함수형 인터페이스의 선언이 바르게 선언되었는지 확인 |
@SuppressWarnings | 컴파일러가 경고메세지를 나타내지 않게 함 |
@Override
class Parent {
void abc() {}
}
class Child extends Parent{
@Override // 오타로 인해 오버라이딩이 되지 않는 상황을 에러를 통해 사용자에게 알려줌
void acb(){}
}
@Deprecated
class Old {
@Deprecated
int Old1 = 1;
@Deprecated
int getOld1() {return Old1;};
}
@FunctionalInterface
@FunctionalInterface
public interface Main{
public abstract void run(); // 단 하나의 추상 메서드만을 가져야 한다.
}
@SuppressWarnings
애너테이션 | 설명 |
@SuppressWarnings("all") | 모든 경고를 억제 |
@SuppressWarnings("deprecation") | Deprecated 메서드를 사용한 경우 나오는 경고 억제 |
@SuppressWarnings("fallthrough") | switch문에서 break 구문이 없을 때 경고 억제 |
@SuppressWarnings("finally") | finally 관련 경고 억제 |
@SuppressWarnings("null") | null 관련 경고 억제 |
@SuppressWarnings("unchecked") | 검증되지 않은 연산자 관련 경고 억제 |
@SuppressWarnings("unused") | 사용하지 않는 코드 관련 경고 억제 |
@SuppressWarnings({"finally", "null", "unchecked"}) // 둘 이상의 경고를 한 번에 억제 가능
메타 애너테이션 : 애너테이션을 정의하기 위한 애너테이션
매타 애너테이션 | 설명 |
@Target | 애너테이션을 정의할 때 적용 대상을 지정하는데 사용한다. |
@Documented | 애너테이션 정보를 javadoc으로 작성된 문서에 포함시킨다. |
@Inherited | 애너테이션이 하위 클래스에 상속되도록 한다. |
@Retention | 애너테이션이 유지되는 기간을 정하는데 사용한다. |
@Repeatable | 애너테이션을 반복해서 적용할 수 있게 한다. |
@Target
대상 타입 | 적용 범위 |
ANNOTATION_TYPE | 애너테이션 |
CONSTRUCTOR | 생성자 |
FIELD | 필드 |
LOCAL_VARIABLE | 지역변수 |
METHOD | 메서드 |
PACKAGE | 패키지 |
PARAMETER | 매개변수 |
TYPE | 타입 |
TYPE_PARAMETER | 타입 매개변수 |
TYPE_USE | 타입이 사용되는 모든 대상 |
@Documented
자바에서 제공하는 애너테이션 중 @Overridedhk @SuppressWarnings를 제외하고 모두 @Documeted가 적용되어 있다.
@Inherited
@Inherited를 상위 클래스에 붙이면, 하위 클래스도 동일하게 적용된다.
@Retention
유지 정책 | 설명 |
SOURCE | 소스 파일에 존재, 클래스 파일에 존재하지 않음 |
CLASS | 클래스 파일에 존재, 실행 시에 사용불가, 기본값 |
RUNTIME | 클래스 파일에 존재, 실행시에 사용가능 |
사용자 정의 애너테이션 : 사용자가 직접 정의하는 애너테이션
@interface 애너테이션명 { // 인터페이스 앞에 @기호만 붙여 애너테이션을 정의한다.
타입 요소명(); // 애너테이션 요소를 선언한다.
}
애너테이션은 java.lang.annotation 인터페이스를 상속받기 때문에 다른 클래스나 인터페이스를 상속받을 수 없다.
728x90
'[JAVA] > JAVA 기본' 카테고리의 다른 글
[JAVA] 스트림(Stream) (0) | 2022.09.16 |
---|---|
[Java] 람다식(Lambda Expression) (0) | 2022.09.15 |
[JAVA] 컬렉션 프레임워크 (0) | 2022.09.14 |
[JAVA] 예외 처리 정리 (0) | 2022.09.14 |
[JAVA] 제네릭 & 와일드 카드 (0) | 2022.09.14 |