Creational Pattern(생성 패턴)

김경민·2020년 12월 4일
0

OOD

목록 보기
1/1

해당 글은 https://refactoring.guru/design-patterns/catalog 을 참고하여 작성하였습니다.

Creational patterns

  • 객체 생성 매커니즘을 다루는 디자인 패턴

Singleton

  • 해당 인스턴스에 글로벌로 접근이 가능하면서 클래스가 오직 하나의 인스턴스만을 가지도록 설계하는 방법

  • 문제점 및 해결방안

    • 클래스가 오직 하나의 인스턴스만을 가져야 한다.
      => 생성자를 클래스 안에서만 접근이 가능하도록 private로 선언한다.
    • 해당 인스턴스에 global적으로 접근이 가능하다.
      => 생성자 처럼 행동하는 생성 함수를 만든다.
      • private로 선언한 생성자로 객체를 만들어 static field에 저장한다.
      • 만일 해당 객체가 이미 만들어진 상태라면 해당 객체를 리턴한다.


Source : https://refactoring.guru/design-patterns/singleton

Builder

  • 복잡한 객체를 차근차근 생성하는 방법

    집을 만든다고 했을 때 해당 집에 창문이 있는지, 문이 있는지, 방이 있는지, 차고가 있는지, ... 등과 같은 정보들을 파라미터로 받는다.
    해당 객체에 창문을 추가하고, 문을 추가하고, 방을 추가하고, 차고는 추가하지 않는 방식으로 객체를 생성하는 방법이다.

  • 문제점 및 해결방안

    • 대부분의 경우에 여러 파라미터들은 사용되지 않는다.(가독성 저하)

      정원이 없고, 수영장이 없고, 창고가 없는 집을 만든다고 했을 때 해당 파라미터들은 사용되지 않는다.

      => 해당 객체의 생성자 코드를 클래스 밖으로 빼온 뒤 분리된 객체를 만든다


Source : https://refactoring.guru/design-patterns/builder

Prototype

  • 이미 만들어진 객체의 클래스와 독립적으로 해당 객체를 복사하는 방법

  • 문제점 및 해결방안

    • 문제점
      • private와 protected member field 때문에 이미 존재하는 객체를 클래스 밖에서 복사하는건 때때로 불가능하다.
      • 이미 만들어진 객체의 정보를 알아야 하기 때문에 실제 클래스에 의존적으로 코드를 만들 수 있다.
    • 해결 방안
      • 이미 만들어진 객체의 복사 과정을 인터페이스를 사용하여 복사한다.

Source : https://refactoring.guru/design-patterns/prototype

Abstract factory

  • 추상화를 통해 연관된 클래스들을 특정화 하지 않고 만드는 방법

  • 문제점 및 해결방안

    • 문제점
      • 새로운 객체를 만들 때 이미 추상화한 것이 있는지 고려해야 한다.
      • 연관된 클래스를 업데이트 할 때마다 프로그램을 바꿔야 한다.
    • 해결 방안
      • 하나의 factory가 연관된 객체들을 만들도록 각 factory에 객체 생성을 위임한다.
      • 하나의 객체가 어느 factory에서 만들어 졌는지 알 필요 없도록 모든 factory에 공통된 인터페이스를 선언한다.


Source : https://refactoring.guru/design-patterns/abstract-factory

Factory Method

  • 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지는 서브클래스가 결정하게 하는 방법

  • 문제점 및 해결방안

    • Factory Method가 중첩되기 시작하면 복잡성이 굉장히 증가한다.
      => 생성자에서 new operator을 이용해서 생성하는 것이 아닌 특별한 factory메서드를 이용해서 생성한다.


Source : https://refactoring.guru/design-patterns/factory-method

0개의 댓글