Creational Pattern

https://flutterdesignpatterns.com

  • Abstract Factory

  • Builder

  • Factory Method

  • Prototype

  • Singleton

Creational 패턴의 의미

"객체 생성(Creation)"에 관한 패턴들

  • 객체를 생성하는 과정과 방법을 다루는 디자인 패턴

  • 핵심 목적: 객체 생성의 복잡성을 숨기고, 시스템을 유연하게 만들기

  • 클라이언트 코드가 구체적인 클래스에 의존하지 않도록 추상화

---------------------------------------------------------------------------------------------------------

Abstract Factory 패턴

특징: 관련된 객체들의 집합(제품군)을 생성

java

// 추상 팩토리
interface GUIFactory {
    Button createButton();
    Checkbox createCheckbox();
}

// 구체적 팩토리들
class WindowsFactory implements GUIFactory {
    public Button createButton() { return new WindowsButton(); }
    public Checkbox createCheckbox() { return new WindowsCheckbox(); }
}

class MacFactory implements GUIFactory {
    public Button createButton() { return new MacButton(); }
    public Checkbox createCheckbox() { return new MacCheckbox(); }
}

// 사용법
GUIFactory factory = new WindowsFactory();
Button button = factory.createButton(); // Windows 스타일
Checkbox checkbox = factory.createCheckbox(); // Windows 스타일

Factory Method vs Abstract Factory:

  • Factory Method: 하나의 객체 생성

  • Abstract Factory: 관련된 객체들의 제품군 생성

핵심: 플랫폼별, 테마별로 일관된 객체 집합을 생성할 때 사용

Builder 패턴

특징: 복잡한 객체를 단계별로 구성

  • 동일한 생성 과정으로 다른 표현의 객체 생성 가능

  • 생성자 매개변수가 많을 때 가독성 향상

  • 불변 객체 생성에 유용

  • 핵심: Director(지시자) + Builder(구체적 생성자) 분리

java

Factory Method 패턴

특징: 객체 생성을 서브클래스에 위임

  • 객체 생성 로직을 캡슐화

  • 새로운 타입 추가 시 기존 코드 수정 없이 확장 가능

  • 느슨한 결합(loose coupling) 구현

  • 핵심: Creator 추상클래스 + ConcreteCreator들이 실제 객체 생성

java

Prototype 패턴

특징: 기존 인스턴스를 복제하여 새 객체 생성

  • 객체 생성 비용이 클 때 복제로 성능 향상

  • 런타임에 동적으로 객체 생성 가능

  • Deep Copy vs Shallow Copy 고려 필요

  • 핵심: clone() 메서드를 통한 자기복제

java

Singleton 패턴

특징: 클래스 인스턴스를 하나만 생성하도록 보장

  • 전역 접근점 제공

  • 메모리 절약 및 공유 자원 관리

  • 멀티스레드 환경에서 동시성 문제 주의

  • 핵심: private 생성자 + static getInstance() 메서드

java

전체 Creational 패턴 정리

  1. Singleton: 인스턴스 1개만 보장

  2. Factory Method: 객체 생성을 서브클래스에 위임

  3. Abstract Factory: 관련 객체들의 제품군 생성

  4. Builder: 복잡한 객체를 단계별로 구성

  5. Prototype: 기존 객체 복제로 새 객체 생성

Last updated