반응형
Annotation 이란?
사전적 의미로 주석이라는 뜻.
자바에서 Annotation은 코드 사이에 주석처럼 쓰이며특별한 의미, 기능을 수행하도록 하는 기술.
이는 프로그램에게 추가적인 정보를 제공하는 metadata 라고 볼수있다.
[ metadata : 데이터를 위한 데이터 ]
Annotation 용도
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
- 실행 시 (런타임) 특정 기능을 실행하도록 정보 제공
Annotation 사용을 위한 순서
- Annotation을정의한다.
- 클래스에 Annotation을 배치한다.
- 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획득하여 기능을 실시한다.
* Reflection
- Reflection이란 프로그램이 실행 중에 JVM에서 실행되는 application 자신의 구조와 동작을 검사하고, 조사하
고, 수정하는 것이다.
- Reflection은 프로그래머가 데이터를 보여주고, 다른 포맷의 데이터를 처리하고, 통신을 위해
serialization(직렬화)를 수행하고, bundling을 하기 위해 일반 소프트웨어 라이브러리를 만들도록 도와준다.
- Java와 같은 객체 지향 프로그래밍 언어에서 Reflection을 사용하면 컴파일 타임에 인터페이스, 필드,
메소드의 이름을 알지 못해도 실행 중에 클래스, 인터페이스, 필드 및 메소드에 접근할 수 있다.
- 새로운 객체의 인스턴스화 및 메소드 호출을 허용한다.
- Java와 같은 객체 지향 프로그래밍 언어에서 Reflection을 사용하여 멤버 접근 가능성 규칙을 무시할 수 있다.
- Spring에서 BeanFactory라는 Container에서 객체가 호출되면 객체의 인스턴스를 생성하게 되는데 이 때
필요하게 된다. 즉, 프레임워크에서 유연성있는 동작을 위해 쓰인다.
- Annotation 자체는 아무런 동작을 가지지 않는 단순한 표식일 뿐이지만, Reflection을 이용하면
Annotation의 적용 여부와 엘리먼트 값을 읽고 처리할 수 있다.
- Class에 적용된 Annotation 정보를 읽으려면 java.lang.Class를 이용하고필드, 생성자, 메소드에 적용된
어노테이션 정보를 읽으려면 Class의 메소드를 통해 java.lang.reflect 패키지의 배열을 얻어야 한다.
[Class.forName(), getName(), getModifier(), getFields() getPackage() 등등 여러 메소드로 정보를 얻을 수 있다.]
- Reflection을 이용하면 Annotation 지정만으로도 원하는 클래스를 주입할 수 있다.
다양한 어노테이션의 종류에 대해선 따로 정리를 해보겠다.
반응형