https://github.com/MungDon/planner-project/blob/master/src/main/java/com/planner/util/UserDataResolver.java
오늘은 프로젝트 진행중에 반복되는 유저정보 가져오는 코드를 줄이고 편리하게 사용하기 위해
커스텀 어노테이션을 만들어 보려합니다.
커스텀 어노테이션을 알아보기전에! 어노테이션이란 무엇인가 부터 알아보겠습니다!
<aside> 👉 사전적 의미로는 주석이라는의미, 하지만 자바에서 어노테이션은 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술입니다.
프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화 된 방법이기도 합니다.
</aside>
<aside> 👉 컴파일러에게 코드작성 문법에러를 체크하도록 정보를 제공합니다.
소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공합니다.
실행 시(runtime) 특정 기능을 실행 하도록 정보를 제공합니다.
</aside>
<aside> 👉 프로그램이 실행 중에 자신의 구조와 동작을 검사하고, 조사하고, 수정하는것을 의미합니다.
프로그래머가 데이터를 보여주고, 다른 포맷의 데이터를 처리, 통신을 위해 직렬화(serialization)를 수행하고, Bundling(번들링)을 하기 위해 일반 소프트웨어 라이브러리를 만들도록 도와줍니다.
객체 지향 프로그래밍 언어에서
Reflection을 사용하면 컴파일 타임에 인터페이스, 필드, 메서드의 이름을 알지 못해도 실행 중에 클래스, 인터페이스, 필드 및 메서드에 접근할 수 있습니다. 또한 새로운 객체의 인스턴스화 및 메서드 호출을 허용합니다.
Reflection을 사용하여 멤버 접근 가능성 규칙을 무시할 수 있습니다. EX) Reflection을 사용하면 서드 파티 라이브러리의 클래스에서 private 필드의 값을 변경가능
</aside>
<aside> 👉 Annotation 자체는 아무런 동작을 가지지 않는 단순한표식입니다 하지만 Reflection을 이용하면 Annotation의 적용 여부와 엘리먼트 값을 읽고 처리가 가능해집니다.
Reflection을 이용하면 Annotation 지정만으로도 원하는 클래스를 주입할 수 있습니다.
</aside>