표준 어노테이션이란?
자바 표준 어노테이션은 자바에서 기본적으로 제공하는 어노테이션이다.
대부분의 어노테이션은 자바 컴파일러에게 정보를 제공하는 역할을 하지만, 용도에 걸맞지 않은 어노테이션을 사용한다면 컴파일 에러가 발생할 수 있다.
표준 어노테이션은 여러 가지가 있지만, 그중에서도
@Override, @Deprecated, @SuppressWarning, @FunctionIInterface
네 가지 어노테이션이 가장 많이 사용된다.
@Override
@Override 어노테이션은 메서드 앞에만 붙일 수 있는 어노테이션이다.
선언한 메서드가 상위 클래스의 메서드를 오버라이딩하는 메서드라는 것을 컴파일러에게 알려주는 역할을 한다.
@Override 어노테이션을 사용하는 이유
만약, 다음과 같이 상위 클래스의 메서드를 오버라이딩하려던 중, 오타가 발생했다고 가정해본다.
class UpperClass {
void run() {}
}
class Subclass extends UpperClass {
void rnu() {} // run이 아닌 rnu로 오타
}
이러한 상황에서 프로그램을 실행한다면, 런타임 에러가 발생하거나, 실행 결과가 예측한 것과 다르게 나타날 수 있다. 또한, 새로운 메서드를 생성한 것으로 인식하여 에러가 발생하지 않을 수도 있다.
이러한 경우를 방지하기 위해 @Override 어노테이션을 사용한다.
@Override 어노테이션은 해당 메서드가 상위 클래스의 메서드를 오버라이딩하는 메서드임을 알리기 때문에, 해당 메서드가 오버라이딩하는 메서드가 없을 경우 에러를 발생시킨다.
즉, @Override 메서드는 사용자의 실수를 방지하기 위해 에러를 발생시키는 어노테이션이라 할 수 있다.
class UpperClass {
void run() {}
}
class Subclass extends UpperClass {
@Override // 어노테이션으로 인해 에러 발생
void rnu() {} // run이 아닌 rnu로 오타
}
@Deprecated
@Deprecated 어노테이션은 새로운 버전의 JDK가 등장하여 더 이상 사용하지 않는 필드나 메서드가 있을 경우 사용한다. 즉, @Deprecated 어노테이션은 필드나 메서드가 새로운 것으로 업데이트되었을 때, 기존의 것을 사용하지 않도록 권장한다.
따라서 해당 메서드가 하위 버전의 호환성 문제로 삭제하기 곤란하여 남겨두어야만 할 때 @Deprecated 어노테이션을 통해 표시하여 더 나은 경우를 택하도록 한다.
class LowerVersion {
@Deprecated
int lowerVersionInt;
@Deprecated
int getLowerVersion() {
return lowerVersionInt;
}
}
기존에 사용하던 인스턴스 변수와 메서드가 새로운 것으로 대체되어 더 이상 사용하지 않는 것을 권장한다.
만약, @Deprecated 어노테이션이 붙은 필드나 메서드를 사용하면, 컴파일 시 다음과 같은 메시지가 나타난다.
Note: 파일명.java uses or overrides a deprecated API.
Note: Recomplie with -Xlint:deprecation for details.
@SuppressWarnings
@SuppressWarnings 어노테이션은 컴파일 경고 메시지가 나타나지 않도록 하는 어노테이션이다.
즉, 경우에 따라 경고가 발생할 것이 충분히 예상됨에도 묵인해야 할 때 사용한다.
@SuppressWarnings 사용 방법
@SuppressWarnings(”표시하지 않을 경고 메시지”) 형태로 사용하며, 옵션의 종류는 다음과 같다.
@SuppressWarnings(”all”) : 모든 경고 메시지 무시
@SuppressWarnings(”deprecation”) : Deprecated 메서드를 사용한 경우 발생하는 경고 메시지를 무시
@SuppressWarnings(”fallthrough”) : switch문에서 break문을 사용하지 않을 때 발생하는 경고 메시지 무시
@SuppressWarnings(”finally”) : finally 관련 경고 메시지 무시
@SuppressWarnings(”null”) : null 관련 경고 메시지 무시
@SuppressWarnings(”unchecked”) : 검증되지 않은 연산자 관련 경고 메시지 무시
@SuppressWarnings(”unused”) : 사용하지 않는 코드 관련 경고 메시지 무시
또한, 다음과 같이 여러 개의 경고 메시지를 무시할 수 있도록 사용할 수 있다.
@SuppressWarnings({"deprecation", "finally", "null"})
@FunctionalInterface
@FunctionalInterface 어노테이션은 함수형 인터페이스를 선언할 때 사용한다.
컴파일러가 함수형 인터페이스의 선언이 바르게 되었는지 확인하도록 하며, 만약, 바르게 선언되지 않았을 경우 에러를 발생시킨다.
즉, @FunctionalInterface은 @Override와 비슷하게 사용자 실수를 방지하기 위해 에러를 발생하기 위해 사용하는 어노테이션이다.
따라서, 굳이 @FunctionalInterface 어노테이션을 붙이지 않아도 선언과 실행을 할 수 있지만, 코드 작성 과정에서 실수를 방지하기 위해 사용하는 것이다.
함수형 인터페이스의 특징으로는 단 하나의 추상 메서드만을 가져야 하는 제약이 있다.
@FunctionalInterface
public interface FunctionalInterface {
public abstract void run();
}
'언어(Language) > Java' 카테고리의 다른 글
[Java] 자바 람다식과 함수형 인터페이스 (Lambda Expression & Functional Interface) (0) | 2022.09.25 |
---|---|
[Java] 자바 메타 어노테이션 정리 및 활용 (0) | 2022.09.24 |
[Java] 자바 사용자 정의 어노테이션(Custom Annotation) 개념 정리 및 활용 (0) | 2022.09.24 |
[Java] 어노테이션(Annotation) 개념 정리 및 종류 (0) | 2022.09.24 |
[Java] 자바 TreeMap 개념 정리 및 활용 (1) | 2022.09.23 |