
우리가 Java, Srping을 공부 및 실무에서 접하다가 보면 당연하게 쓰이는 기능이다.
그래서 당연하게만 쓰이던 내용을 좀 더 자세하게 기록하여 까먹어도 다시 보려고 한다
텍스트 사전적 의미로는 주석 이다.
이를 추가적인 내용은 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서 유용한 정보제공
이 내용만 봤을때 의구심이 들었다. 주석처럼이라는건 어떤것인가에 대하여
우리가 흔히쓰는 주석은 /**/, // 이러한 방식을 이용하여 주석을 사용했을 것이다.
빌드 과정은 4가지 단계(전처리 과정 - 컴파일 과정 - 어셈블리 과정 - 링킹 과정)로 이루어져 있다.
주석은 전처리 과정에서 제외한다고 알고있다.
하지만 우리가 DTO를 개발할때 기본적으로 쓰이는 @Setter, @Getter등 어노테이션을 이용하면 코드가 깔끔해지고, 귀찮은 추가 작업을 안해줘도 되는데 왜 주석처럼이란 말이 나왔는지 찾아봤다.
그렇다면 왜 어노테이션이 존재 하는지와 무엇인지 알아보자.

과거에는 이렇게 java 소스코드, 소스 코드와 관련된 xml 파일이 별도로 존재하다 보니깐 소스코드 파일과 설정 파일을 같이 관리해야하는 불편함이 존재했다.

그래서 하나의 파일로 관리하기 위해 나온게 어노테이션이다.
@ ~~~ <- 어노테이션
public ~~~ <- 코드
이런식으로 코드를 작성하면 코드와 설정을 같이 관리하게 되는 것 이다

어노테이션은 소스코드에 붙이는 하나의 라벨이라고 생각하면 이해가 쉽다. 위 그림은 커스텀 어노테이션의 사용과 실행 절차를 사과가 포장되는 과정에 비유하여 설명하고 있다. 판매가능한 사과에는 판매가능(@CanSale)라벨지를 달아서 포장과정시 이를 판별하여 제품을 포장한다고 가정해 본다면. 먼저, 타겟에 적합한 라벨지를 만들어야 한다. 라벨에는 이 라벨을 붙일 대상을 명시하고, 라벨은 언제까지만 타겟에 부착할 것인지 등을 적는다. 그리고 라벨에 이름을 적으면 라벨이 만들어진다. 사과의 상태에 따라 판매가능 라벨을 부착한다. 즉, 싱싱한 사과라는 타겟에 판매가능이라는 어노테이션을 부착한 것이다. 그럼 제품포장 과정에서는 이 라벨을 보고 판별하여 제품을 포장할 것이다. 이렇게 제품 포장 기능이 실행되어진다.
[출처]http://wiki.hash.kr/index.php/%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98
이와같이 어노테이션을 직접 정의해서 사용하기 위해서는 먼저 어노테이션을 정의한 후, 원하는 타겟에 적용한다. 그 후 어노테이션이 붙은 타겟을 어떻게 사용할 지 기능을 구현하면, 해당 기능이 실행될 때 타겟에 붙은 어노테이션에 따라서 타겟의 경로가 결정될 것이다.
다음에는 어떻게 어노테이션에 작동하는지에 대하여 적을예정이다.