생성자에 인자 많을 때 사용
어떤 필드에 어떤 인자 넣어줬는지 명확히 알 수 있음
넣을 필요 없는 필드(null)은 굳이 선언할 필요 없음.
ㄴ 그런데? 필드에 null 들어간다는 것 명확히 볼 수 있는게 좋다는 의견도 있음.
@Builder 어노테이션 사용
1. 빌더 패턴 사용하지 않는 예
// TestDto.java
public class TestDto {
private Long id;
private String name;
private String text;
private int age;
public TestDto() {}
public TestDto(Long id) {
this.id = id;
}
public TestDto(Long id, String name) {
this.id = id;
this.name = name;
}
public TestDto(Long id, String name, String text) {
this.id = id;
this.name = name;
this.text = text;
}
public TestDto(Long id, String name, String text, int age) {
this.id = id;
this.name = name;
this.text = text;
this.age = age;
}
}
// Test.java
@SpringBootTest
public class TestDtoTest {
TestDto testDto = new TestDto(1L);
TestDto testDto1 = new TestDto(1L, "이름");
TestDto testDto2 = new TestDto(1L, "이름", "번호");
TestDto testDto3 = new TestDto(1L, "이름", "번호", 20);
}
2. 빌더 패턴 사용 예
// TestDto.java
public class TestDto {
private Long id;
private String name;
private String text;
private int age;
public TestDto() {}
// 생성자가 받는 인자 종류 많은 경우 사용
// 생성자 값 넣을 때 인자 값 많아지면 코드 길어지는 문제
// 종류별로 다 안써도 됨
@Builder
public TestDto(Long id,String name, String text, int age) {
this.id = id;
this.name = name;
this.text = text;
this.age = age;
}
}
// Test.java
@SpringBootTest
public class TestDtoTest {
TestDto testDto = new TestDto(1L);
TestDto testDto1 = new TestDto(1L, "이름");
TestDto testDto2 = new TestDto(1L, "이름", "번호");
TestDto testDto3 = new TestDto(1L, "이름", "번호", 20);
// 이 부분 추가해야 함
// 어떤 필드에 어떤 인자 넣어줬는지 명확히 알 수 있음
TestDto testDto = TestDto.builder()
.name("이름")
.age(20)
.build();
}
클래스 상단에 @Builder 선언하면 IDEMTITY 전략을 설정한 기본키 값에 값 할당할 수 있음 -> 안전 X
생성자에 Builder 선언해 엔티티 생성 시 필요한 데이터만 받을 수 있게 하는것이 좋다.
https://aamoos.tistory.com/687#1.%20@Builder%20빌더패턴%20사용하지않은%20예
https://zorba91.tistory.com/298