생성 패턴 (Creational Pattern)

1. 불필요 의존성 제거, Factory Method 패턴

(1) Factory Method 패턴의 개념 및 사용 목적

개념사용 목적
클래스의 인스턴스 생성을 하위 클래스에게 맡기도록 객체를 생성하기 위한 인터페이스를 정의하는 디자인 패턴– 결합 문제 해결 위한 불필요한 의존성 제거
– 프레임워크와 실제 인스턴스 생성을 분리

(2) Factory Method 패턴의 클래스 다이어그램

(3) Factory Method 패턴의 구성요소

구성요소역할
Product인스턴스가 가져야 할 인터페이스를 결정
CreatorProduct를 생성하는 추상 클래스
ConcreteProduct구체적인 내용을 추가하여 구체적인 제품 결정
ConcreteCreator구체적인 내용을 추가하여 구체적인 제품 생성 클래스를 결정

 

2. API 기반 부품 조립/제품 완성, Abastact Factory 패턴

(1) Abastact Factory 패턴의 개념 및 사용 목적

개념사용 목적
인터페이스(API) 기반 서로 연관되거나 의존 객체를 구현 클래스 지정 없이 생성 가능한 디자인 패턴– 구상 클래스에 의존하지 않고, 추상화 된 것에 의존(의존성 역전 원칙)
– 인터페이스(API)만 사용하여 제품 제작

(2) Abastact Factory 패턴의 클래스 다이어그램

(3) Abastact Factory 패턴의 구성요소

구성요소역할
AbstractProduct만들어지는 추상적인 부품이나 제품의 인터페이스(API) 결정
AbstractFactoryAbstractProduct의 인스턴스를 만들기 위한 인터페이스(API) 결정
Client인터페이스(API)만 사용하여 작업
ConcreteProductAbstractProduct의 인터페이스(API)를 구현
ConcreteFactoryAbstractFactory의 인터페이스(API)를 구현

 

3. 복잡한 인스턴스를 조립, Builder 패턴

(1) Builder 패턴의 개념 및 사용 목적

개념사용 목적
복잡한 구조의 프로그램에서 구조를 가진 인스턴스를 만들어가는 디자인 패턴– 크고 복잡한 구조를 가진 프로그램 작성
– 전체를 구성하는 각 부분 별 작성

(2) Builder 패턴의 클래스 다이어그램 

(3) Builder 패턴의 구성요소

구성요소역할
Builder인스턴스를 생성하기 위한 인터페이스(API) 결정
ConcreteBuilder인터페이스(API)를 구현, 실제 인스턴스 생성으로 호출되는 메소드 정의
Director인터페이스(API)를 사용하여 인스턴스를 생성

 

4. 복사하여 인스턴스 생성, Prototype 패턴

(1) Prototype 패턴의 개념 및 사용 목적

개념사용 목적
클래스에서 인스턴스 생성 대신 인스턴스로부터 다른 인스턴스를 생성하는 디자인 패턴– 종류가 너무 많아 클래스로 정리 불가능 경우
– 클래스로부터 인스턴스 생성이 어려운 경우
– 프레임워크와 생성 인스턴스 분리하는 경우

(2) Prototype 패턴의 클래스 다이어그램

(3) Prototype 패턴의 구성요소

구성요소역할
Prototype인스턴스를 복사하여 새로운 인스턴스를 만들기 위한 메소드 결정
ConcretePrototype인스턴스를 복사하여 새로운 인스턴스를 만드는 메소드 구현
Client인스턴스를 복사하는 메소드를 이용하여 새로운 인스턴스 생성

 

5. 프로그램 내 하나의 인스턴스만 생성, Singleton 패턴

(1) Singleton 패턴의 개념 및 사용 목적

개념사용 목적
프로그램 내 인스턴스가 하나만 존재하는 것을 보증하는 디자인 패턴– 컴퓨터 시스템 전체 표현
– 현재 시스템 설정 표현
– 커넥션 풀, 스레드 풀 표현
  • 인스턴스가 여러 개 존재하면 인스턴스 간 서로 영향을 미쳐 예상치 못한 버그가 발생할 수 있으므로 인스턴스가 하나뿐인 것을 보장하는 전제 조건에서 프로그래밍

(2) Singleton 패턴의 클래스 다이어그램

(3) Singleton 패턴의 구성요소

구성요소역할
Singleton유일한 인스턴스를 얻기 위한 static 메소드 보유하며, 항상 같은 인스턴스 반환

 

[참고]

  • 영진닷컴, JAVA 언어로 배우는 디자인 패턴 입문: 쉽게 배우는 GoF의 23가지 디자인 패턴

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^