주석처럼 프로그래밍 언어에 영향을 미치지 않으면서 다른 프로그램, 프로그래머에게 유익한 정보를 제공하는 메타데이터의 형태이다.

  • 코드와 설정 파일을 한 곳에서 관리하여 설정 파일에 대한 의존성을 감소
  • 보일러 플레이트 코드 제거로 가독성 향상
  • 커스텀 어노테이션 등을 활용하여 유지보수, 확장성 향상

등장배경

어노테이션이 등장하기 전에는 소스 코드를 자바 파일에 관리하고 xml 파일에 설정 파일를 관리했다. 해당 방식은 파일이 커지고 복잡해지며 버전 불일치 이슈까지 발생했다.
이를 해결하고자 자바 파일에 설정 파일을 한번에 관리하자는 취지로 어노테이션이 등장했다.

역할

  • 컴파일러를 위한 정보 제공
  • 컴파일러나 빌드 도구가 코드, XML 설정 파일 등을 자동 생성하도록 정보 제공
  • 런타임에서 동작을 제어하도록 정보 제공

메타 어노테이션

어노테이션을 생성할 때 사용하는 어노테이션이다.

  • @Target: 어노테이션을 적용할 수 있는 대상의 지정에 사용
  • @Retention: 어노테이션이 유지되는 기간을 지정
  • @Document: 어노테이션 정보가 javadoc으로 작성한 문서에 포함
  • @Inherited: 어노테이션이 자손 클래스에 상속되도록 한다.
  • @Repeatable: 하나의 대상에 같은 어노테이션을 여러 번 붙게 할 수 있도록 설정

동작 원리

  • 컴파일 시점: 컴파일러가 내부적으로 처리한다, 어노테이션 프로세서
  • 런타임 시점: 리플렉션