본문 바로가기
Java

[Java 심화] 애너테이션(Annotation) (소스코드 미수록)

by jphwany 2022. 6. 1.

애너테이션(Annotation)

주석과 같은 개념

주석이나 애너테이션 둘다 소스 코드에는 영향을 주지 않고 정보를 제공한다
차이점이라고 한다면

누구에게 정보를 제공하는가 이다

주석은 소스코드를 읽는 사람에게 정보를 제공하는 것이고
애너테이션은 프로그램에게 정보를 제공하는 것이다

컴파일러에게 문법 에러를 체크하도록 정보를 제공하거나
프로그램 빌드할 때 코드 자동 생성할 수 있도록 정보를 제공하고
런타임에 특정 기능을 실행하도록 정보를 제공하는 역할을 하고 있다


표준 애너테이션


@Override  컴파일러에게 메소드를 오버라이딩하는 것이라 알림
: 만약 오타라도 나서 오버라이딩이 안될 경우에 에러를 발생시켜서 알려달라고 마크해놓는 것이라고 보면 편하다

@Deprecated  앞으로는 사용하지 않을 대상이라는 것을 알림
: 하위 버전 호환성 문제같은 걸로 삭제하기는 곤란한 그런 상태로 남겨두지만 사용하지 않겠다 라고 마크해놓는 것
소스 코드 상에는 남아있지만 사용은 하지 않겠다 라고 표시하는 그런 개념

@FunctionalInterface  함수형 인터페이스임을 알림
: 함수형 인터페이스를 선언해줬을 때 올바르게 했는지 확인해준다
함수형 인터페이스 같은 경우엔 추상 메소드가 1개 있어야 하는데 그 이상일 경우 에러를 발생시킨다

@SuppressWarning 컴파일러가 경고 메시지를 날리지 않음
: 경고가 발생할 것을 알면서도 묵인하고 사용해야 할 때가 있는데 그러기 위함의 표시


메타 애너테이션


애너테이션에 붙이는 애너테이션, 애너테이션 정의 할 때 쓰인다

@Target               애너테이션을 정의할 때 적용 대상을 지정하는데 사용
@Documented    애너테이션 정보를 javadoc으로 작성된 문서에 포함시킴
@Inherited          애너테이션이 하위 클래스에 상속되도록 함
@Retention         애너테이션이 유지되는 기간을 정하는데 사용
@Repeatable      애너테이션을 반복해서 적용할 수 있게 함


사용자 정의 애너테이션

말그대로 직접 정의해서 사용한다

사용방법은 다음과 같다

@interface 애너테이션명 {
타입 요소명();
}


애너테이션은 java.lang.annotation 인터페이스를 상속받기 때문에 다른 클래스나 인터페이스를 상속 받을 수 없다

 

 

애너테이션 사용 예시 코드는 추후에 빈번하게 사용이 되면 
그 실전에서 가져와서 추가하겠다 

 

댓글