스프링 코드를 보다 보면 항상 엔티티 클래스 위에 저 세가지 어노테이션이 종종 붙어 있는 경우를 보았다.
지난 포스트에 DI의 세가지 방법에 관한 글을 정리하고 나니
아래의 세 어노테이션을 정리할 필요성이 느껴져 해당 어노테이션들도 공부해보려고 한다!
- @NoArgsConstructor
- @RequiredArgsConstructor
- @AllArgsConstructor
@NoArgsConstructor
@NoArgsConstructor는, 매개변수를 갖지 않는 기본 생성자를 생성해준다.
@NoArgsConstructor는 주로 access = AccessLevel.PROTECTED 를 설정하여 무분별한 객체 생성을 막는 용도로 쓰인다.
해당 속성을 부여하면 기본 생성자에 접근 제어가 되므로, 결국 해당 클래스에서 지정한 생성자를 통해 객체를 생성할 수 밖에 없게 된다. 따라서 기본 생성자를 이용한 무분별한 객체 생성을 방지할 수 있다.
@RequiredArgsConstructor
@RequiredArgsConstructor는 final로 선언된 필드와 not null 조건이 붙은 필드(ex. PK, @Column(nullable = false)이 설정된 column)에 한하여 생성자를 만들어준다.
@AllArgsConstructor
@AllArgsConstructor는 해당 클래스 내에 존재하는 모든 필드를 매개변수로 하는 생성자를 만들어준다.
Q) 그럼 무조건 @AllArgsConstructor를 생성하면 좋지 않을까?
A) 만약 생성자를 통해 필드를 초기화할 때, 필요 없는 필드가 존재하는 경우가 있다.
이러한 경우 결국 또 다른 생성자를 새로 작성해 주어야 하므로, 자칫 여러 생성자가 중복 작성되어 코드의 가독성을 떨어뜨릴 우려가 있다.
이를 위해 @Builder 패턴을 이용한다고 한다.
'CS > Spring' 카테고리의 다른 글
[Spring] DI의 세 가지 방법(필드 주입, 생성자 주입, setter 주입) (0) | 2023.04.21 |
---|---|
[Spring] 스프링에서 빈 객체를 등록하는 방법(@Bean, @Component) (0) | 2023.04.14 |
[Spring] 비즈니스 로직이란? (0) | 2023.04.08 |
[Spring] Controller, Service, Repository (0) | 2023.04.08 |
[Spring] Entity, DTO, VO 무슨 차이야? (0) | 2023.04.07 |