우주먼지
Published 2023. 1. 1. 04:27
Builder Pattern Design Pattern

💡 빌더 패턴

Builder Pattern을 사용하는 이유
- 필요한 데이터만 설정 가능

- 유연성
- 가독성
- 변경 가능성의 최소화

 

Builder Pattern을 사용 안했을때 생기는 문제점

  • Entity의 필드에 변경사항이 생길 때, 생성자 & 정적 팩토리 메소드의 파라미터 수정 작업 필요
  • 가독성 ↓
  • 유연성 ↓
  • 불필요한 변경 가능성 최소화가 안됨으로 인한 Setter 메서드 사용 & 객체 불변성 확보에 불리함

 

Builder Pattern 사용 예시

  • 아래 코드에서 Builder Pattern의 장점
    • 필요에 따른 각각 다른 객체 생성 시, 객체 생성의 유연함
    • 필요에 따른 Entity 필드의 추가 & 수정 작업 필요 시의 편리함
    • Entity의 원본 필드에 final을 추가함으로써 객체 불변성 확보 (Setter 사용 지양)
    • 가독성 & 유지보수성 ↑
/* -------------- Builder Pattern 사용 X -------------- */

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private String name;
    private String adress;
    private int age;
    
    /* Entity의 필드 중 adress가 없는 객체 생성을 하기 위한 생성자 & 정적 팩토리 메서드 */
    
    public User (String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public static User of(String name, int age) {
        return new User(name, age);
    }
}

/* -------------- Builder Pattern 사용 -------------- */

@Data
@Builder
@AllArgsConstructor
public class User {
    private String name;
    private String adress;
    private int age;
}

public class UserService {
    
    // 1. 빌더 패턴을 이용한 객체 생성
    public User create() {
        User user = User.builder()
                .name("abc")
                .adress("abc")
                .age(25)
                .build();
    }
    
    // 2. Entity의 필드를 추가 해야 할때 객체의 유연한 변경 (email 필드를 추가하는걸로 가정)
    public User create() {
        User user = User.builder()
                .name("abc")
                .adress("abc")
                .email("abc@abc.com")
                .age(25)
                .build();
    }
}

'Design Pattern' 카테고리의 다른 글

Factory Method Pattern  (0) 2023.01.01
Static Factory Method Pattern  (0) 2023.01.01
profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그