Design pattern/생성 패턴

[디자인패턴] 5장 빌더 패턴

미스터로즈 2021. 5. 4. 22:06

공부 하기 위해서 요약 정리 해놓은 것입니다..

 

정확하고 꼼꼼한 자료는 쉽게 배워 바로 써먹는 디자인 패턴을 확인 하시고

코드는 github.com/infohojin/patterns 을 참고해 주세요.

 

빌더 패턴은 추상 팩토리를 확장하여 크고 복잡한 객체를 생성할 수 있습니다.

 

건축물

빌더(builder)의 사전적 의미는 '건축물을 짖는 사람 또는 회사'입니다. 즉, 커다란 구조의 큰 물체를 설계하고 만드는 것을 의미합니다.

 

객체의 종류에는 단일 객체와 복합 객체 2가지가 있습니다.

 

단일 객체란 하나의 클래스로 생성된 객체를 말합니다. 객체는 데이터와 행동을 가지며 때로는 객체를 확장하기 위해 상속 구조를 적용하기도 합니다.

 

팩토리. 팩토리 메서드, 추상 팩토리 모두 단일 객체를 사용합니다.

 

복합객체는 하나의 객체가 다른 객체를 포함하는 관계 구조입니다.

 

복합 객체는 객체가 생성된 후에도 다른 객체와 관계를 설정해 동적 확장할 수 있다는 장점을 갖고 있습니다.

 

많은 디자인 패턴의 원리와 목적은 상속 결합을 배제하고 의존 관계의 복합 객체로 변경하여 처리하는 것입니다.

 

빌더 패턴은 복잡한 구조의 복합 객체를 생성하는 로직을 별도로 분리하여 객체 생성을 처리합니다.

 

빌더

빌더 패턴은 복잡한 구조를 가진 복합 객체의 생성 과정을 분리하여 처리하는 패턴입니다.

 

복합 객체의 생성과정을 단계별로 분리함으로써 복합 객체의 생성을 일반화할 수 있습니다.

 

복합 객체의 내부 구조에 맞게 단계별로 객체 생성을 분리하고 관계를 결합하는 과정이 필요합니다.

 

복합 객체의 생성 로직을 일반 코드로 작성하면 객체 생성 과정을 효율적으로 관리하기 어렵습니다.

 

이러한 이유로 빌더 패턴은 복합 객체 생성 과정을 별도의 독립된 클래스로 관리합니다.

 

추상클래스로 설계된 빌더는 자체적으로 객체를 생성할 수 없어 추상 클래스를 상속하는 하위 클래스(ConcreteBuilder)가 필요합니다.

 

 

<?php
/**
 * 알고리즘의 하위 클래스를 구현합니다.
 */
class ProductModel extends Algorism
{
    public function __construct()
    {
        echo "Algorism ".__CLASS__ ."객체를 생성하였습니다.\n";
        $this->Composite = new Computer();
    }

    /**
     * 빌더 단계별 메소드
     */
    public function setCpu($cpu)
    {
        echo "CPU를 설정합니다. \n";
        $this->Composite->_cpu = $cpu;

        return $this;
    }

    /**
     * 빌더 단계별 메소드
     */
    public function setRam($size)
    {
        echo "RAM를 설정합니다>>";
        foreach ($size as $mem) {
            echo "슬롯 ".$mem."GB 장착/";
            array_push($this->Composite->_ram, new Memory($mem));
        }
        echo "\n";
        return $this;
    }
    
    /**
     * 빌더 단계별 메소드
     */
    public function setStorage($size)
    {
        echo "Storage를 설정합니다>>";
        foreach ($size as $disk) {
            echo "슬롯 ".$disk."GB 장착/";
            array_push($this->Composite->_storage, new Storage($disk));
        }
        echo "\n";
        return $this;
    }

}

 

빌더 패턴은 추상 팩토리에서 유사한 객체의 제품군을 알고리즘화 하여 다양한 복합 객체를 생성, 관리하는 용도로 사용합니다.

 

빌더는 관계된 서브 객체의 단계별 생성 절차가 완료된 후 복합 객체를 생성 및 반환합니다. 하지만, 추상 팩토리는 객체를 생성한 즉시 반환합니다.

 

빌더 패턴의 경우 만들고자 하는 부품들이 모여야 의미가 있습니다. 추상 팩토리 패턴은 각각의 부품에만 의미를 부여합니다.