Spring Framework/SpringBoot

[SpringBoot] @RequiredArgsConstructor 는 정말 생성자 코드를 만들어낼까?

Razelo 2021. 7. 21. 11:40

김영한님의 스프링 핵심 기본편강의를 보면서 lombok을 쓰면서 @RequiredArgsConstructor  을 사용하게 되었는데, 

 

설명상으로는 필드에 final을 지정하면, 반드시 값을 지정해줘야 하니까. 

@RequiredArgsConstructor  

라는 어노테이션이 알아서 값이 지정되야만 하는 것들을 위해서 생성자를 만들어낸다고 말씀하셨다.

 

과연 그럴까? (이런 의문이 든 이유는 신기해서이다... 어떻게 코드를 집어넣을 수 있는거지? )

 

코드상으로 실제로 생성자가 있는 것과 정확히 일치한다고 말씀하셨다... 그래서 직접 확인해보고 싶어서 .class 파일을 디컴파일 해보았다. 

 

디컴파일러로는 jd-gui가 가장 흔하게 쓰이는 것 같아서 다운받아서 사용했다.

(그냥 검색하면 다운받는 곳이 주르르 나온다. )

왠지 모르게 프로그램에서 귀여운 느낌이 난다... 스윙으로 만들어진것같은 그런 냄새가 난다... 

 

 

아래는 이제 인텔리제이에서 작성한 코드이다. 분명 생성자가 없다. 생성자가 없고, final로 선언된 필드가 있으며,

@RequiredArgsConstructor 

가 클래스선언부 위에 선언되어있다. 실제로 컴파일될때, 생성자가 코드가 들어가게 된다는데, 이제 확인해보자. !! 

 

 

결과는 아래와 같다... 

jd-gui에서 .class 파일을 선택하면 바로 소스코드가 나오는데,

실제로 지금 보면 생성자가 만들어져있는 것을 확인할 수 있다. 

신기하다... 

 

 

이러한 기술을 어노테이션 프로세싱 기술이라고 하는데, 상당히 흥미로운 기술인 것 같다. 

관련 블로그글들이 상당히 많던데, 조금 이해하기 어려운 부분들이 있었다. 

 

몇번 더 알아보고 나중에 가능하다면, 직접 이러한 기능을 만들어보는 것도 재밌는 프로젝트가 될 수 있겠다 싶었다. 

 

 

반응형