언어(Language)/Java

[Java] 자바 표준 어노테이션 정리 및 활용

잇트루 2022. 9. 24. 04:00
반응형

표준 어노테이션이란?

자바 표준 어노테이션은 자바에서 기본적으로 제공하는 어노테이션이다.

대부분의 어노테이션은 자바 컴파일러에게 정보를 제공하는 역할을 하지만, 용도에 걸맞지 않은 어노테이션을 사용한다면 컴파일 에러가 발생할 수 있다.

표준 어노테이션은 여러 가지가 있지만, 그중에서도

@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();
}
반응형