Builder란?

Moondy·2022년 5월 13일
0

생성자 단점

  • 매개변수가 많아지면 코드를 읽기 어렵고, 어떤 순서로 매개변수 넣어야하는지 헷갈린다.

자바빈즈 패턴의 단점(JavaBeans pattern) - setter

  • 개념
    • setter메서드로 매개변수 값 정하기
  • 하나의 객체를 만들려고 메서드를 여러개 호출해야함 (코드 길어짐)
  • 객체가 완전히 생성되기 전까지는 일관성(consisitency)가 무너진 상태가 됨(미완성) ⇒ 디버깅 어려움

빌더 패턴

public class PizzaExample {
    public static void main(String[] args) {
        NyPizza pizza = new NyPizza.Builder(SMALL).addTopping(Pizza.Topping.SAUSAGE).addTopping(Pizza.Topping.ONION).build();
        Calzone cal = new Calzone.Builder().addTopping(HAM).sauceInside().build();

    }
}
  • 빌더의 세터 메서드 들은 빌더 자신을 반환하기 때문에 연쇄적으로 호출 가능
  • 계층적으로 설계된 클래스와 함께 쓰기 좋다
    • (코드참고) Pizza의 하위 클래스들의 빌더가 정의한 build 메서드는 상위클래스인 Pizza에서 정한 타입을 리턴하는것이 아니라 하위 클래스에서 정한 타입으로 반환
    • (코드 참고) NyPizza.Builder는 NyPizza를 반환하고, Calzone.Builder는 Calzone을 반환
    • 즉, 상속받은 Class의 Builder가 정의한 build 메서드가 상위 메서드의 타입을 return 하는 것이 아닌 자신의 타입을 return
    • 유연한 코드, 확장성 확보
  • 단점
    • Builder를 항상 만들어야 하기 때문에 생성비용이 무조건 생김
    • 점층적 생성자 패턴(Argument를 여러개 가진 Constructor) 보다 장황하여 적은 갯수의 Parameter일 경우 오히려 좋지 않을 수 있다.

Lombok을 사용하면 훨씬 더 Simple해질 수 있음

  • 필수값 을 지정할 수 있음
  • default 값을 지정할 수 있음
profile
DevOps를 살짝 찍먹하는 BackEnd 개발자

0개의 댓글