개념공부

디자인 패턴 : 빌더 패턴

Cadi 2025. 1. 8. 17:10

빌더 패턴 

  • 복잡한 객체의 생성 과정을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴
  • 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고, 마지막에 통합하며 객체를 생성

예를 들어 햄버거 하나를 만든다고 하면 햄버거에 치즈를 빼는 사람도, 넣는 사람도 있을 것이고, 패티를 두 장 넣는 사람도 있을 것이다.

 

생성자로 생성한다면 ?

이것을 표현하기 위해서 생성자로는 각각의 매개 변수들 (번, 치즈, 고기, 야채) 등을 받아 생성해야 한다. 

이는 매개변수가 늘어나면 몇 번째가 번이었는지, 치즈였는지 혼동할 여지가 있고, 번만 먹고 싶을 때에도 0을 넣어주어야 하는 번거로움이 있다.

또 타입이 다양해질수록 메서드 수가 기하급수적으로 늘어나 가독성과 유지보수 측면에서 좋지 않다.

 

자바 빈 패턴

위의 단점을 해결하기 위해 나온 것으로, 매개변수가 없는 생성자로 객체 생성 후 각각의 매개변수의

Setter 메서드를 활용해 클래스 필드의 초기값을 설정하는 방식이다. 

다만, 객체 생성 시점에서 모든 값들을 주입하지 않아 일관성과 불변성 문제가 발생된다 .

 

일관성 문제 : 필수 매개변수를 깜빡한다면 일관성이 무너진, 유효하지 않은 객체가 된다.

불변성 문제 : 외부적으로 Setter를 노출하고 있으므로 변경이 가능해진다

 

특히 2번 문제 때문에 빌더 패턴이 나왔다.. 

 

 

 

 

빌더 패턴은 객체 생성만을 담당하는 별도의 빌더 클래스를 만드는 것이다. 

 

빌더 클래스를 만들고,  필드 멤버 구성을 만들고자 하는 클래스 멤버와 똑같이 해준다.

그리고 각 멤버에 대한 Setter 구성을 해 준다. 

이 때 Setter에서 return this를 해 주어 연속해서 호출할 수 있게 해 준다. 

그리고 마지막에 build()라는 메서드에 만들고자 하는 클래스를 반환하는 

세팅해준 멤버 변수 값으로 생성해주는 메서드를 만들어준다. 

 

장점

  • 객체 생상 과정이 바로 보임
  • 디폴트 매개변수 생략을 간접적으로 지원 ( 빌더 클래스에서 멤버변수에 기본 할당을 해 준다)
  • 필수 멤버와 선택적 멤버를 분리 가능 ( 빌더의 생성자에 필수 멤버를 넣어줌)

단점

  • 코드의 복잡성 증대
  • 생성자보다 약간 성능 저하
  • 필드의 개수가 적고, 변경 가능성이 적다면 정적 팩토리 메서드로 ! 

 

 

위 내용은 아래 참조를 정리한 내용입니다. 설명히 굉장히 잘 되어 있어서 직접 보는 것을 추천드립니다. 

 

 

 

 

https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-%EB%B9%8C%EB%8D%94Builder-%ED%8C%A8%ED%84%B4-%EB%81%9D%ED%8C%90%EC%99%95-%EC%A0%95%EB%A6%AC

 

💠 빌더(Builder) 패턴 - 완벽 마스터하기

Builder Pattern 빌더 패턴(Builder Pattern)은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다. 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아

inpa.tistory.com