-
Builder Pattern(빌더 패턴)STUDY/디자인패턴 2024. 11. 12. 22:36
빌더 패턴이란?
복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴이다. 이 패턴을 사용하면 같은 제작 코드를 사용하여 객체의 다양한 유형들과 표현을 제작할 수 있다.
문제
House(집) 객체를 만드는 경우, 간단한 집을 지으려면 네 개의 벽과 바닥을 만든 후 문도 설치하고 한 쌍의 창문도 맞춘 후 지붕도 만들어야 한다. 하지만 뒤뜰과 기타 물품(난방 시스템, 배관 및 전기 배성 등)이 있는 더 크고 현대적인 집을 원하는 경우 어떻게 해야할까?
가장 간단한 해결책은 House 클래스를 확장하고 매개변수의 모든 조합을 포함하는 자식 클래스들의 집합을 만드는 것이다. 하지만 이 방법은 상당한 수의 자식 클래스를 만들게 되는 문제가 있다.
자식 클래스를 늘리지 않는 방식은, 기초 House 클래스에 House 객체를 제어하는 모든 가능한 매개변수를 포함한 거대한 생성자를 만드는 것이다. 하지만 이 방법은 대부분의 매개변수가 항상 필요하지 않다는 것이다.
해결책
빌더 패턴을 사용해 복잡한 객체들을 단계별로 생성하는 것이다. 객체 생성을 일련의 단계들(buildWalls, buildDoor)로 정리하며, 객체를 생성하고 싶으면 위 단계들을 builder 객체에 실행하면 된다. 중요한 점은 필요한 단계들만 호출하고, 모든 단계를 호출할 필요가 없다는 것이다.
더 나아가 제품을 생성하는 데 사용하는 빌더 단계들에 대한 일련의 호출을 디렉터(관리자)라는 별도의 클래스로 추출할 수 있다. 디렉터 클래스는 제작 단계들을 실행하는 순서를 정의하는 반면 빌더는 이러한 단계들에 대한 구현을 제공한다.
하지만 디렉터 클래스는 필수 사항은 아니다.
구조
- 빌더 : 모든 유형의 빌더들에 공통적인 제품 생성 단계들을 선언한 인터페이스
- 구상 빌더 : 생성 단계들의 다양한 구현을 제공하고, 공통 인터페이스를 따르지 않는 제품들도 생산할 수 있음
- 제품 : 빌더 결과로 나온 객체들
- 디렉터 : 생성 단계들을 호출하는 순서를 정의하므로 제품들의 특정 설정을 만들고 재사용할 수 있음
장단점
- 장점
- 객체들을 단계별로 생성하거나 생성 단계들을 연기하거나 재귀적으로 단계들을 실행할 수 있다.
- 제품들의 다양한 표현을 만들 때 같은 생성 코드를 재사용할 수 있다.
- 단일 책임 원칙 : 제품의 비즈니스 로직에서 복잡한 생성 코드를 고립시킬 수 있다.
- 단점
- 패턴이 여러 개의 새 클래스들을 생성해야 하므로 코드의 전반적인 복잡성이 증가한다.
'STUDY > 디자인패턴' 카테고리의 다른 글
Singleton Pattern(싱글턴 패턴) (0) 2024.11.26 Prototype Pattern(프로토타입 패턴) (0) 2024.11.26 Abstract Factory Pattern(추상 팩토리 패턴) (1) 2024.11.12 Factory Method Pattern(팩토리 메서드 패턴) (0) 2024.10.29 Spring - 디자인 패턴 (0) 2021.05.10