이전에도 많이 봤던 컴파일 에러지만, 생각해보니 정리를 했던 적이 없었던 것 같아서 짧게나마 정리해보려고 한다.
@Builder는 lombok이 지원하는 애너테이션이며, 메소드 체이닝을 통해 쉽게 인스턴스를 생성할 수 있게 해준다. 내부적으로는 @AllArgConstructor를 생성해주는 효과가 있다. 생각해보면 당연한 게 모든 변수를 Builder로 접근할 수 있어야 하기 때문이지 않을까.
JPA에서의 Entity는 기본 생성자가 필요하다. 그렇기 때문에 본인의 경우에는 처럼 자주 사용을 한다.
@Entity
@NoArgsConstructor
public class Memeber{
...
}
근데 항상 @AllArgsConstructor를 붙이지 않으면 에러가 났었는데, 그 이유를 명확히 알지 못한 채로 @AllArgsConstructor를 붙인 후 그냥 넘어갔던 것 같다. 그러다가 같이 개발을 하시는 분께서 Builder에 대해서 궁금해하셨고, 같이 찾다보니 알게된 사실이 있어서 공유하고자 한다.
JPA Entity가 아닌 일반적인 클래스에서 @Builder를 사용할 때를 보자
@Builder
public class MemberDTO{
...
}
위와 같이 작성했을 때는 어떤 컴파일 에러도 나지 않는다. 그리고 Builder의 기능을 사용할 수 있게 되는 것이고. 그런데 생각해보면 의아한 게 있다. 어떻게 전체 인자를 받는 생성자를 따로 만든 것도 아닌데 Builder의 기능을 수행할 수 있었던 것일까? 아래는 Builder 애너테이션 내부를 일부 추출해서 가져온 캡처이다.
위의 내용은 이렇다. @Builder는 @AllArgsConstructor를 붙인 효과를 준다. 그러나, @XXArgsConstructor를 붙이게 된다면 @AllArgsConstructor를 붙인 것과 같은 효과를 주지 않는다.라는 내용이다.
아래는 위의 내용들을 요약해서 정리한 내용이다.
잘못된 정보는 지적해주시면 감사하겠습니다.