GoF(Gang of Four)에서는 23가지 디자인 패턴을 3가지 유형으로 분류합니다.
- 객체를 생성하는데 관련된 패턴들
- 객체가 생성되는 과정의 유연성을 높이고 코드의 유지를 쉽게 함
- 프로그램 구조에 관련된 패턴들
- 프로그램 내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는데 활용할 수 있는 패턴들
- 반복적으로 사용되는 객체들의 상호작용을 패턴화 해놓은 것들
전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴
예제 요구사항
- 프린터 객체를 하나만 생성해서 전역에서 공유
객체 생성 처리를 서브 클래스로 분리 해 처리하도록 캡슐화하는 패턴
구조와 구현의 분리
예제 요구사항
- 주어진 기능을 실제로 제공하는 적절한 클래스 생성 작업을 별도의 클래스/메서드로 분리시켜야 한다.
- 2가지 방식으로 구현해보기
- 전략 패턴 + 싱글톤 패턴
- 전략 패턴 + 싱글톤 패턴 + 템플릿 메서드 패턴
구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
객체 생성의 가상화
예제 요구사항
- 엘리베이터 부품 업체 변경하기
- 여러 제조 업체의 부품을 사용하더라도 같은 동작을 지원하게 한다.
- 코드의 변경을 최소화 한다.
객체의 결합 을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴
동적으로 책임을 추가
예제 요구사항
- 기본 도로 표시 기능에 차선 표시, 교통량 표시의 2가지 추가 기능이 있을 때 추가 기능의 모든 조합은 4가지가 된다.
여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴
전체-부분의 관계(Ex. Directory-File)를 갖는 객체들 사이의 관계를 정의할 때 유용하다.
예제 요구사항
- 컴퓨터에 추가 장치 지원하기
- 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스 를 사용할 수 있다.
공통적인 프로세스를 묶어 주기 !
어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
예제 요구사항
- 엘레베이터 모터 종류마다 고유의 작동 방식이 존재함
행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다.
전략이란, 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등
예제 요구사항
- 새로운 기능의 추가(새로운 이동, 공격 기능)가 기존의 코드에 영향을 미치지 못하게 해야함
한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성 하는 패턴
데이터의 변경이 발생했을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용하다.
이벤트 발생 후 객체 외부에서 처리하는 방식
예제 요구사항
- 여러 가지 방식으로 성적 출력하기
- 통보 대상 클래스나 대상 객체의 변경에도 통보하는 클래스를 수정 없이 그대로 사용할 수 있다.
실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴
명령을 객체화한다.
예제 요구사항
- 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용 할 수 있다.