ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Builder Pattern(빌더 패턴)
    STUDY/디자인패턴 2024. 11. 12. 22:36

    빌더 패턴이란?

    복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴이다. 이 패턴을 사용하면 같은 제작 코드를 사용하여 객체의 다양한 유형들과 표현을 제작할 수 있다.

     

    문제

    House(집) 객체를 만드는 경우, 간단한 집을 지으려면 네 개의 벽과 바닥을 만든 후 문도 설치하고 한 쌍의 창문도 맞춘 후 지붕도 만들어야 한다. 하지만 뒤뜰과 기타 물품(난방 시스템, 배관 및 전기 배성 등)이 있는 더 크고 현대적인 집을 원하는 경우 어떻게 해야할까?

     

    가장 간단한 해결책은 House 클래스를 확장하고 매개변수의 모든 조합을 포함하는 자식 클래스들의 집합을 만드는 것이다. 하지만 이 방법은 상당한 수의 자식 클래스를 만들게 되는 문제가 있다.

     

    자식 클래스를 늘리지 않는 방식은, 기초 House 클래스에 House 객체를 제어하는 모든 가능한 매개변수를 포함한 거대한 생성자를 만드는 것이다. 하지만 이 방법은 대부분의 매개변수가 항상 필요하지 않다는 것이다.

     

    해결책

    빌더 패턴을 사용해 복잡한 객체들을 단계별로 생성하는 것이다. 객체 생성을 일련의 단계들(buildWalls, buildDoor)로 정리하며, 객체를 생성하고 싶으면 위 단계들을 builder 객체에 실행하면 된다. 중요한 점은 필요한 단계들만 호출하고, 모든 단계를 호출할 필요가 없다는 것이다.

     

    더 나아가 제품을 생성하는 데 사용하는 빌더 단계들에 대한 일련의 호출을 디렉터(관리자)라는 별도의 클래스로 추출할 수 있다. 디렉터 클래스는 제작 단계들을 실행하는 순서를 정의하는 반면 빌더는 이러한 단계들에 대한 구현을 제공한다.

    하지만 디렉터 클래스는 필수 사항은 아니다.

     

    구조

    • 빌더 : 모든 유형의 빌더들에 공통적인 제품 생성 단계들을 선언한 인터페이스
    • 구상 빌더 : 생성 단계들의 다양한 구현을 제공하고, 공통 인터페이스를 따르지 않는 제품들도 생산할 수 있음
    • 제품 : 빌더 결과로 나온 객체들
    • 디렉터 : 생성 단계들을 호출하는 순서를 정의하므로 제품들의 특정 설정을 만들고 재사용할 수 있음

     

    장단점

    - 장점

    • 객체들을 단계별로 생성하거나 생성 단계들을 연기하거나 재귀적으로 단계들을 실행할 수 있다.
    • 제품들의 다양한 표현을 만들 때 같은 생성 코드를 재사용할 수 있다.
    • 단일 책임 원칙 : 제품의 비즈니스 로직에서 복잡한 생성 코드를 고립시킬 수 있다.

    - 단점

    • 패턴이 여러 개의 새 클래스들을 생성해야 하므로 코드의 전반적인 복잡성이 증가한다.

     

Designed by Tistory.