Java Annotation
- Annotation (@)은 사전적 의미로 '주석'이다. --> Java에서 @를 이용한 주석이다.
- Java 코드에 주석을 달아 특별한 의미를 부여한 것이며 특별한 기능을 수행하도록 하는 기술이다. (클래스, 메소드, 변수 등 모든 요소에 선언이 가능함) → 즉, 프로그램에게 추가적인 정보를 제공해주는 메타 데이터라고도 볼 수 있다.
- JDK5 부터 등장하였다. Java, Spring이 제공해주는 것도 있고, 사용자가 직접 정의하여 만들 수 있다.
용도
- @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위한 용도-> 컴파일러에게 정보(코드 작성 문법 에러 등)를 제공한다.-> 컴파일 과정에 어노테이션 정보로부터 코드를 생성하기 위한 용도이다.
- SW 개발 툴이 빌드나 배치를 수행할 때 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
- 실행 시(런타임 시) 특정 기능을 실행하도록 정보를 제공한다.
기본적으로 Annotation을 사용하는 순서는 다음과 같다.
- Annotation 정의
- 클래스에 Annotation 배치 (꼭 클래스가 아니여도 된다.)
- 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획득하여 기능을 실시힌다.
Reflection
- 프로그램이 실행 중에 자신의 구조와 동작을 검사하고, 조사하고, 수정하는 것을 의미한다.
- 프로그래머가 데이터를 보여주고, 다른 포맷의 데이터를 처리하고, 통신을 위해 직렬화를 수행하고, bundling을 하기 위해 일반 SW 라이브러리를 만들도록 도와준다.
- 객체 지향 프로그래밍 언어인 Java에서 Reflection을 사용하면 컴파일 타임에 인터페이스, 필드, 메소드 이름을 알지 못하여도 실행 중에 클래스, 인터페이스, 필드 및 메소드에 접근할 수 있다.또한, 멤버 접근지정자 규칙을 무시할 수 있다.(Ex) Reflection 사용 시 서드 파티 라이브러리의 클래스에서 private 필드의 값을 변경할 수 있다.