패턴 | 설명 |
---|---|
추상 팩토리 (Abstract Factory) | 연관된 팩토리 그룹을 캡슐화 |
빌더 (Builder) | 복잡한 객체의 표현 방법과 구조를 분리 |
팩토리 메서드 (Factory Method) | 클래스의 인스턴스 생성을 서브클래스로 넘김 |
프로토타입 (Prototype) | 새로운 객체를 생성하기 위해 복제 가능한 클래스의 인스턴스 프로토타입을 명시 |
싱글톤 (Singleton) | 오직 하나의 클래스 인스턴스만을 생성 |
오로지 객체의 한 인스턴스만 생성하는 싱글톤.
객체의 인스턴스를 생성하며, 상속된 클래스의 세세한 구현코드를 감출 수 있는 팩토리 메서드
클래스를 완전한 싱글톤으로 유지하려면 생성자, 소멸자, 복사 생성자와 할당 연산자를
private으로 선언.
각기 다른 위치에서 지역적이지 않은 (non-local : 함수 바깥에 선언된 객체) 정적 객체를 초기화 하는 순서는 정해져있지 않다 (Meyers, 2005)
정적변수는 스택영역(후입선출) 메모리, 싱글톤이 자신의 소멸자 내에서 다른 싱글톤을 호출할 때 해당 싱글톤의 인스턴스는 메모리에서 해제될 수 있다.
패턴 | 설명 |
---|---|
어댑터 (Adapter) | 한 클래스의 인터페이스를 다른 인터페이스로 변경 |
브릿지 (Bridge) | 구현된 추상화를 독립적으로 변경시킬 수 있도록 분리 |
컴포지트 (Composite) | 부분-전체 계층을 표현하기 위해 객체를 트리 구조로 구성 |
데코레이터 (Decorator) | 이미 존재하는 객체에 동적으로 행동을 추가 |
퍼사드 (Facade) | 서브 시스템의 인터페이스에 일관된 고수준의 인터페이스를 제공 |
플라이급(Flyweight) | 여러 가지의 작은 객체들을 효과적으로 지원하기 위해 공유를 사용 |
프록시 (Proxy) | 다른 객체의 접근을 제어하기 위한 대체 방법을 제공 |
기존에 호환되지 않거나 오래된 인터페이스의 문제를 상위 수준에서
API를 매핑시켜 해결하는 방법
프록시와 어댑터 - 1:1 매핑
퍼사드 - 수많은 클래스의 인터페이스를 단순하게 만듬
패턴 | 설명 |
---|---|
책임 연쇄 (Chain of Responsibility) | 송신 객체의 요청이 처리되도록 하나 이상의 수신 객체를 제공 |
커맨드 (Command) | 객체 형태로 요청이나 연산을 캡슐화, 연산 취소 지원 |
인터프리터 (Interpreter) | 주어진 언어로 어떻게 문장들을 표현하고 평가하는지 명시 |
이터레이터 (Iterator) | 객체에 저장된 여러 요소들을 순차적으로 접근할 수 있는 방법 제공 |
메디에이터 (Mediator) | 객체가 어떻게 상호작용하는지 캡슐화 하는 객체 정의 |
메멘토 (Memento) | 나중에 같은 상태로 객체가 다시 저장될 수 있도록 해당 객체의 내부상태를 캡처 |
옵저버 (Observer) | 1 대 다의 객체 관계에서 상태 변경 알림 |
스테이트 (State) | 객체의 내부 상태가 변경되면 자신의 형태를 변경 |
스트레티지 (Strategy) | 같은 계열의 알고리즘을 정의해서 각각을 캡슐화 한 후 런타임에 서로 교환 가능하도록 만듬 |
템플릿 메서드 (Template Method) | 연산의 알고리즘 뼈대를 정의하고 일부 단계는 서브클래스에서 처리 |
방문자 (Visitor) | 객체 구조를 이루는 요소에 대해 수행할 연산을 표현 |
최근에는 코어, 생성, 주변부와 그 이외
헤더파일에서 구현 세부 정보를 숨기는 것.
헤더파일에는 포인터를 선언하고, 구현파일에 데이터를 선언.
브릿지 디자인 패턴의 특별한 형태인 이디엄.
클래스 간의 직간접적인 의존성을 제거
하나의 클래스 (옵저버)가 변경을 알리기 위해 다른 클래스 (구독자)를 등록시킴으로써
개념적으로 관련 없는 클래스끼리 서로 통신할 수 있도록 함
느슨하게 연결된 API를 설계하는 데에 중요함