객체지향 디자인 패턴 - Creational Pattern

Smile:)today·2024년 6월 7일

Creational Pattern(생성 패턴)

  • 인트턴스를 만드는 절차를 추상화하는 패턴
  • 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화
  • 클래스의 인스턴스들이 어떻게 만들고 어떻게 결합하는지에 대한 부분을 완전히 가려줌

1. Abstract Factory DP

  • 구체적인 클래스에 의존하지 않고 서로 연관 및 의존하는 객체들의 그룹(Product family)을 만들기 위한 인터페이스 제공
  • 상호 교환 가능한 여러 Product families에서 연관되고 호환되는 Product set 생성
  • 연관된 서브 클래스를 묶어 한번에 교체 가능
  • Abstract Factory는 실제 객체를 정확히 알지 못해도 객체를 생성 및 조작 가능

유용한 경우

1) 시스템이 구성요소 또는 제품이 생성되는 방식과 독립적이어야 하는 경우
2) 시스템을 상호 교환 가능한 여러 Product family 중 하나로 구성해야 하는 경우
3) 관련 Product families를 다른 product families의 유사 product families와 혼합해서는 안되는 경우
4) 제품의 구현이 드러나지 않은 상태에서 제품의 인터페이스만 노출되는 경우

2. Builder DP

  • 작게 분리된 인스턴스를 조합하여 객체를 생성하는 패턴
  • 객체의 생성 과정과 표현 방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
  • 생성할 객체의 종류를 손쉽게 추가 및 확장 가능
  • 많은 선택적인 멤버 변수 또는 지속성 없는 상태값들에 대해 처리해야 하는 문제 해결
  • 유사한 코드의 중복을 방지하여 객체 생성 과정을 단순화할때 사용

유용한 경우

1) 복잡한 객체를 생성하는 과정이 객체를 구성하는 부분과 독립적이어야 하는 경우
2) 객체 생성과정에서 생성에 사용되는 것들의 다양한 구현을 허용해야하는 경우
3) 서로 다른 표현 방식을 가지는 객체를 동일한 방식으로 생성하고 싶은 경우

3. Factory Method

  • 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
  • 상위클래스: 인터페이스만 정의
  • 서브클래스: 실제 생성
  • 가상 생성자(Virtual Constructor) 패턴이라고도 함

Factory Method DP vs Abstract Factory DP

유사성

  • Product instance 생성을 위한 메소드 정의

차이점

  • Abstract Factory에서 팩토리의 유일한 책임은 product를 만드는 것
  • Factory Method는 생성된 product를 사용하여 building a structure 역할도 존재

둘의 단점

  • 각 product family는 서브 클래스에 의해 대표됨
  • 다른 product family의 product를 혼합 가능, 잠재적인 조합 수와 서브 클래스 수 폭발적 증가

4. Prototype DP

  • 원본 객체를 복제하는 방법으로 객체 생성
  • 서브 클래스의 폭발적 증가 방지
  • 비용이 큰 경우 사용

유용한 경우

  • 시스템이 구성요소 및 제품이 생성되는 방식과 독립적이어야 하는 경우
  • 인스턴스화할 클래스가 런타임에 지정된 경우
  • 객체를 생성하는 방식 또는 구성 형태, 표현 방식 등과는 무관하게 객체를 생성하고 싶을 때

5. Singleton DP

  • 하나의 객체를 생성하면 생성된 객체를 어디서든 참조가능
    But, 여러 프로세스가 동시에 참조할 수 X
  • 클래스 내에 인스턴스 1개만!
  • 메모리 낭비 최소화

단점

하나의 객체만 공통으로 사용하기에 객체 간 결합도가 높고 변경에 유연하게 대처 불가

출처

추상팩토리 패턴
추상팩토리 패턴2
빌더 패턴
싱글톤
프로토타입 패턴

profile
Hi, I'm vitamin

0개의 댓글