애너테이션(Annotation)
애너테이션은 주석처럼 프로그래밍 언어에 영향을 미치지 않으며 유용한 정보를 제공해 준다.
@Override
@ 로 시작하고 메타데이터를 프로그램 요소(인스턴스 변수, 생성자, 매서드, 클래스 등)에 연결하는 데 도움을 준다.
예전에는 주석을 XML로 따로 관리를 했다는데 프로그램이 변경되고 버전이 올라감에 따라 주석을 관리하는 XML도 변경해야 되는 번거로움이 존재했다.
이러한 문제를 해결하기 위한 대안으로 나온 것이 현재의 애너테이션이다.
대표적인 애너테이션 몇 개만 살펴보자
@Override
우리가 조상의 메서드를 상속받아 구현할 때 발생할 수 있는 문제로는 철자 문제가 있다.
개발자가 의도한 것은 오버라이딩이었지만 철자가 틀리면 의도와는 다르게 동작할 수 있다.
class Parent {
void parentMethod() { }
}
class Child extends Parent {
void parentmethod() { } // 조상의 메서드를 오버라이딩하려고 했지만 철자를 잘못적어서 전혀 다른 메서드로 분류되는 경우가 있다.
@Override
void parentMethod() { } // @Overrind를 붙여서 해당 메서드는 오버라이딩하는 메서드라고 표시해줘서 사전에 실수를 예방할 수 있다.
}
위의 코드와 같이 프로그램은 정상적으로 실행되지만 철자가 틀려서 개발자가 의도한 오버라이딩이 안 되는 것을 알 수 있다. 따라서 @Override 애너테이션을 붙여 해당 메서드는 오버라이딩하는 메서드라고 명시를 해주면 철자를 틀리는 실수 같은 것을 해결할 수 있다.
@Deprecated
해당 애너테이션은 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다.
@Deprecated
void test() { }
코드에서 test라는 메서드에 @Deprecated 애너테이션이 붙었다면 다음과 같이 표기된다.
프로그램을 실행하면 문제없이 돌아가지만 사용을 권장하지 않는다는 경고를 알려준다.
Date 클래스를 살펴보면 getDate 메서드는 @Deprecated 된 것을 알 수 있다. 따라서 객체를 생성하여 해당 메서드를 사용하면 보는 것과 같이 줄 처리가 돼서 권장하지 않는 메서드임을 표시해 준다.
@FunctionalInterface
해당 애너테이션은 함수형 인터페이스인지 알려주는 애너테이션이다.
함수형 인터페이스는 하나의 추상 메서드만 가져야 하는데 애너테이션이 없으면 어떤 것이 추상 메서드인지 구분하기 매우 어렵게 된다.
Testable 인터페이스에 애너테이션을 적용하면 컴파일러가 함수형 인터페이스로 인식하게 되는데 해당 코드에서는 메서드가 2개 작성되었기 때문에 개발자의 실수를 예방할 수 있다.
해당 애너테이션이 없었다면 Testable 인터페이스는 함수형 인터페이스 의도로 만든 것인지 확인하기 어려워진다.
@SuppressWarings
해당 애너테이션은 컴파일러의 경고메시지가 나타나지 않게 억제해 주는 애너테이션이다.
프로그램을 개발하다 보면 컴파일러가 여러 가지 경고 메시지를 보여주는데 처리하는 것이 좋지만 때로는 넘어가도 되는 경고일 수도 있기 때문에 해당 애너테이션을 사용하여 억제하게 된다.
해당 애너테이션을 사용하여 ArrayList를 만들 때 발생할 수 있는 경고를 억제할 수 있다.
'자바' 카테고리의 다른 글
Java - 제네릭 (0) | 2023.11.15 |
---|---|
Java - 컬렉션 (0) | 2023.11.14 |
Java - 내부 클래스 (0) | 2023.11.11 |
Java - Exception (0) | 2023.11.11 |
Java - 열거형 (0) | 2023.11.09 |