Builder 패턴

Haechan Kim·2022년 11월 1일
0

Spring

목록 보기
18/68
post-thumbnail
  • Builder 패턴이란?

생성자에 인자 많을 때 사용
어떤 필드에 어떤 인자 넣어줬는지 명확히 알 수 있음
넣을 필요 없는 필드(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

0개의 댓글