빌더 패턴은 추상 팩토리를 확장하여 크고 복잡한 객체를 생성할 수 있다.
빌더 패턴은 복잡한 구조의 복합 객체를 생성하는 로직을 별도로 분리하여 객체 생성을 처리
복합 객체의 생성 과정을 단계별로 분리함으로써 복합 객체의 생성을 일반화할 수 있습니다.
복합, 단일 객체
그럼 여기서 말하는 복합 객체가 무엇인지 알아보자
복합 객체와 대비 되는 단어는 단일 객체이다.
객체 지향에서 객체의 종류는 크게 단일 객체와 복합 객체 2가지가 있다.
단일 객체 : 하나의 클래스로 생성된 객체
( 객체는 데이터와 행동을 가지며 때로는 객체를 확장하기 위해 상속 구조를 적용 )
팩토리, 팩토리 메서드, 추상 팩토리 모두 단일 객체를 사용
복합 객체 : 하나의 객체가 다른 객체를 포함하는 관계 구조 ( 구조적 의존 관계를 통해 객체를 확장 )
복합 객체는 내부적으로 다른 클래스의 객체를 포함
복합 객체 사용을 중요시하는 것이 최신 객체지향 트렌드
이전에 학습한 팩토리, 팩토리 메서드, 추상 팩토리 패턴으로는 복합 객체를 생성할 수 없다
그렇다면 이러한 복합 객체라는 단어가 생긴 이유는 무엇일까
그 이유에 대해서 알아보자
복합 객체가 등장한 이유
생성 패턴의 주요 목적은 객체의 생성 과정을 한 곳에 집중화하는 것이다.
패턴을 사용하여 객체를 생성 관리하는 이유는 인스턴스화 과정에서 발생하는 강력한 의존 관계를 해소하기 위해서이다.
전형적인 클래스 확장 방식 -> 상속
강력한 상하 결합 관계, 불필요한 모든 행위까지 포함된다는 단점 존재
이러한 단점을 개선하기 위해 의존성 주입을 사용
의존성 주입을 통해 복합 객체를 생성해서 사용
복합 객체 : 하나의 객체가 다른 객체를 포함하는 관계 구조 ( 구조적 의존 관계를 통해 객체를 확장 )
장점 : 객체가 생성된 후에도 다른 객체와 관계를 설정해 동적 확장 가능
많은 디자인 패턴의 원리와 목적은 -> 상속 결합을 배제하고 의존 관계의 복합 객체로 변경하여 처리하는 것
복합 객체의 생성의 어려움으로 빌더 패턴 등장
복합 객체에는 구조에 맞게 객체를 생성하고 관계를 설정하는 로직이 필요합니다.
이러한 생성 로직은 일반적으로 클라이언트 코드 안에 작성됩니다.
복합 객체의 생성 로직을 일반 코드로 작성하면 객체 생성 과정을 효율적으로 관리하기 어렵습니다.
-> 이러한 이유로 빌더 패턴은 복합 객체 생성 과정을 별도의 독립된 클래스로 관리
빌더 패턴은 복합 객체의 생성 로직을 별도 클래스로 분리
빌더 패턴, 추상 팩토리 패턴 비교
빌더 패턴은 추상 팩토리 패턴을 확장하고, 복잡한 단계를 가진 복합 객체를 생성할 수 있다.
빌더 | 추상 팩토리 | |
설계 목적 | 생성 단계를 중점으로 설계 | 유사한 객체의 생성 과정을 중심으로 제품 군을 설계 |
반환 내용 | 관련된 서브 객체의 단계별 생성 절차가 완료된 후 복합 객체를 생성 및 반환 | 객체를 생성한 즉시 반환 |
부품의 의미 | 만들고자 하는 부품들이 모여야 의미가 있음 | 각각의 부품에만 의미를 부여 |
'DesignPattern' 카테고리의 다른 글
[DesignPattern] Adapter Pattern ( 어댑터 패턴 ) (0) | 2021.05.25 |
---|---|
[DesignPattern] Prototype Pattern ( 프로토타입 패턴 ) (0) | 2021.05.24 |
[DesignPattern] Abstract Factory VS Factory Method 차이 (0) | 2021.05.15 |
[DesignPattern] Abstract Factory Pattern ( 추상 팩토리 패턴 ) (0) | 2021.05.13 |
[DesignPattern] Singleton Pattern ( 싱글턴 패턴 ) (0) | 2021.05.12 |