사전적 의미로는 주석이라는 뜻을 가지고 있다. 자바에서는 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다.
자바의 어노테이션은 보통 골뱅이(@) 기호를 앞에 붙여서 사용한다. JDK 1.5 버전 이상에서부터 사용가능하며, 자바 어노테이션은 클래스 파일에 임베드되어 컴파일러에 의해 생성된 이후 JVM에 포함되어 동작한다.
어노테이션을 이용시
자바 빌트인 어노테이션
@Override
메소드를 오버라이드 하겠다는 의미로 메소드의 선언 앞에 붙여준다. 만약 상속 받은 부모 클래스 또는 구현해야할 인터페이스에서 해당 메소드가 없다면 컴파일 오류가 발생.
@Deprecated
메소드를 Deprecated 시킨다. 이 메소드를 사용하는 애플리케이션을 컴파일 할 경우 컴파일 경고가 발생한다. 하위호환을 위해서 메소드 자체를 없애지는 못하지만 사용하지 말 것을 사용자에게 알리고 싶을 때 붙여준다.
@SuppressWarnings
컴파일러 경고를 출력하지 않도록 설정한다. 경고 상황을 개발자가 알고 있는 경우에는 컴파일 로그가 지저분해지고 진짜 잡아야하는 경고들이 잘 보이지 않을 수 있기 때문에 어노테이션을 사용한다.
@SafeVarargs
제너릭 같은 가변인자 매개변수를 사용할 때 경고를 무시
@FunctionalInterface
자바에서 람다 함수를 위한 인터페이스를 지정한다. 함수형 인터페이스에 사용하기 적합하지 않은 경우에는 컴파일 오류가 발생한다.
@Retention
어노테이션의 리텐션 기간을 명명한다.
.class
.Runtime
.Source
@Documented
자바 문서에도 어노테이션 정보가 표현된다.
@Target
생성할 어노테이션이 적용될 수 있는 위치를 나열한다.
.TYPE
.ANNOTAION_TYPE
.FILED, .CONSTRUCTOR, .METHOD, .LOCAL_VARIABLE, .PACKAGE
@Inherited
자식 클래스가 어노테이션을 상속 받을 수 있다.
@Repeatable
반복적으로 어노테이션을 선언할 수 있다.
어노테이션 프로세서란?
컴파일 타임에 어노테이션을 스캔하고 처리하기 위해 javac에서 확장해서 사용하는 도구라고 볼수 있다. 그리고 개발자들은 특정 어노테이션을 위한 개발자만의 어노테이션 프로세서를 등록할 수 있다.
컴파일 단계에서 실핼되기 때문에, 빌드 단계에서 에러를 출력하게 할 수 있고, 소스코드 및 바이트 코드를 생성할 수도 있다.
Lombok이란?
@Getter, @Setter, @builder 등의 어노테이션과 프로세서를 제공하여 표준적으로 작성해야 할 코드를 개발자 대신 생성해주는 라이브러리 이다.
롬복 미사용
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getImageUrl() {
return imageUrl;
}
롬복 사용시
private Long id;
private String imageUrl;
이와같이 롬복 사용시 간결하게 코드 표현이 가능하다.
래퍼런스
https://hbase.tistory.com/169
https://roadj.tistory.com/9
https://zzang9ha.tistory.com/349