노트

생성 패턴

Creational Design Patterns

설계#pattern · 연결된 개념 8개

쉽게 말하면

생성 패턴은 가구를 직접 깎는 대신 주문만 넣고 완성품을 받는 방식들의 모음이에요. 어느 공방이 어떤 순서로 만드는지 몰라도 되니, 만드는 쪽을 바꿔도 쓰는 쪽은 그대로예요.

비유가 깨지는 곳 주문만 하면 끝나는 것 같지만 방식마다 대가가 있어요. 추상 팩토리는 제품 종류가 하나 늘면 모든 팩토리 인터페이스를 고쳐야 하고, 프로토타입은 깊은 복사냐 얕은 복사냐가 까다로워요.

객체를 만드는 과정을 감추는 패턴들. 어떤 구체 클래스를 고를지, 생성 단계를 어떻게 보장할지, 생성 비용을 어떻게 줄일지를 다룬다. 호출하는 쪽이 new 구체클래스()를 직접 쓰지 않게 해서 결합도(Coupling)를 낮추는 것이 공통점이다.

  • 팩토리 메서드 패턴: 생성 결정을 전용 메서드나 하위 클래스로 미룬다
  • 빌더 패턴: 복잡한 객체를 단계별로 조립한다
  • 싱글턴 패턴: 인스턴스를 하나로 제한하고 전역 접근점을 준다
  • 추상 팩토리(Abstract Factory): 서로 짝이 맞아야 하는 제품들(예: 운영체제별 버튼·체크박스·메뉴)을 한 세트로 만드는 팩토리를 둔다. 제품군을 통째로 갈아 끼우기 쉽지만, 제품 종류가 하나 늘면 모든 팩토리 인터페이스를 고쳐야 한다
  • 프로토타입(Prototype): 기존 객체를 복제해서 새 객체를 만든다. 생성 비용이 크거나 구체 클래스를 모를 때 쓴다. 어떤 참조를 공유하고 어떤 것을 새로 만들지(깊은 복사냐 얕은 복사냐)가 까다롭다(얕은 복사와 깊은 복사). JavaScript의 프로토타입 상속과는 다른 이야기다

생성 로직을 바깥 컨테이너가 맡는 의존성 주입(Dependency Injection, DI)은 이 패턴들의 상당 부분을 프레임워크 수준에서 대신한다.

출처: Creational Design Patterns — Refactoring.Guru

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 전략 패턴

    같은 목적을 가진 여러 알고리즘을 각각 별도 객체(또는 함수)로 빼고, 실행할 때 그중 하나를 골라 끼우는 패턴. 호출하는 쪽은 공통 인터페이스만 안다.

  • 구조 패턴

    클래스와 객체를 조합해 더 큰 구조를 만드는 패턴들. 맞지 않는 인터페이스, 부분과 전체, 기능 덧붙이기, 접근 제어 같은 문제를 다룬다. 상당수가 "같은 인터페이스를 가진 객체로 감싼다"는 같은 모양을 하고 있고, 감싸는 목적이 다르다.

  • 심플 디자인

    켄트 벡이 XP(Extreme Programming)에서 제시한 단순한 설계의 네 가지 규칙. 우선순위 순으로 ① 모든 테스트를 통과하고 ② 의도를 드러내고 ③ 중복이 없고 ④ 요소가 가장 적다. 마틴 파울러가 이렇게 정리한 형태가 널리 쓰인다.

  • 템플릿 메서드 패턴

    알고리즘의 뼈대(단계의 순서)는 상위 클래스의 메서드에 고정하고, 일부 단계만 하위 클래스가 바꾸게 하는 패턴.

  • 행동 패턴

    객체 사이의 책임 분배와 대화 방식을 정리하는 패턴들. 요청 전달, 알고리즘 교체, 상태 변화, 알림, 작업 캡슐화 같은 문제를 다룬다.

보기 옵션