@Builder의 선언위치
@Builder는 Class에 선언할 수도 있고, Class의 Constructor에 선언할 수도 있다.
Class에 선언
@Builder
public class Person {
private int id;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
위와 같이 Class에 @Builder를 선언할 경우 문제점이 있는데, 아래 이미지처럼 Class의 모든 필드가 builder에 노출된다는 것이다.
인스턴스를 생성할 때 인자로 받고 싶지 않은 필드가 있을 경우, @Builder를 Constructor에 선언함으로써 해결할 수 있다.
Constructor에 선언
public class Person {
private int id;
private String name;
private int age;
@Builder
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
위와 같이 id가 인자에 포함되지 않은 Constructor에 @Builder를 생성할 경우 builder()에 id가 노출되지 않는다.
추가로 아래와 같이 @Builder.Default를 선언하면 builder()를 통해 객체가 생성될 때 값이 지정되지 않은 경우 미리 설정해놓은 값으로 할당된다.
public class Person {
@Builder.Default
private int id = 0;
private String name;
private int age;
@Builder
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
'발견' 카테고리의 다른 글
[Docker] 도커 연결 시 Host 포트와 Container 포트 (0) | 2023.06.08 |
---|---|
[오늘의 발견] 원형 자료구조에서의 인덱스 (0) | 2023.06.08 |
[Spring] Port 8080 is already in use 에러 해결 방법 (0) | 2022.08.25 |
Spring Security 회원가입 POST 요청 시 500 에러 발생 (0) | 2022.08.21 |
Port Forwarding(포트 포워딩)이 안될때 - 80 to 8080 (0) | 2022.08.18 |