728x90
반응형
@RequiredArgsConstructor @AllArgsConstructor 모두 Lombok 라이브러리에서 제공하는 어노테이션으로, 생성자를 자동으로 만들어주는 역할을 합니다.
이 둘의 차이점을 알아보겠습니다.
@RequiredArgsConstructor 는 final 로 선언된 필드에 대해서만 생성자를 만듭니다.
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Example {
private final int id;
private String name; // final이 아닌 필드
// 생성자는 id만을 매개변수로 받음
}
이렇게 하면 다음 과 같은 생성자가 생성되는 것입니다.
public Example(int id) {
this.id = id;
}
그래서 아래와 같이 작성하면
@RequiredArgsConstructor
public class Service {
private DomainService domainService;
public ResponseDto getData() {
String data = domainService.getName();
...
}
}
domainService 가 초기화 되지 않아 null 이 되고 getData() 메소드의 domainService.getName() 메소드에서 NullPointerException 이 발생합니다.
반면 @AllArgsConstructor 는 final 여부와 상관 없이 모든 필드에 대해서 생성자를 만듭니다.
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Example {
private final int id;
private String name; // final이 아닌 필드
// 생성자는 id와 name을 매개변수로 받음
}
------
public Example(int id, String name) {
this.id = id;
this.name = name;
}
따라서 필드의 초기화가 필수인지에 따라 상황에 맞게 선택하면 됩니다.
728x90
반응형
'SpringBoot' 카테고리의 다른 글
@InjectMocks 한 객체에 given()을 주면 어떻게 될까? (0) | 2023.11.30 |
---|---|
REST API request별 swagger3.0.0 파라미터 명세 (0) | 2023.11.29 |
@Transactional(readOnly = true) 중간에 save(insert) 하기 (0) | 2023.08.03 |
웹 개발 발전 과정 Servlet, JSP, MVC, FrameWork (0) | 2023.01.18 |
@NotNull, @NotEmpty, @NotBlank 문자열 검증 (0) | 2022.08.30 |
댓글