개념 : 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴
이를 참고하여 개발할 경우, 개발의 효율성과 유지보수성, 운용성이 높아지며, 프로그램 최적화에 도움이 된다.
구성요소
: 패턴의 이름, 문제 및 배경, 솔루션, 사례, 결과, 샘플 코드로 구성되어 있다.
유형
디자인 패턴의 유형
목적에 따라
생성 패턴 / 구조 패턴 / 행위 패턴으로 나뉘고생성 패턴
- 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴
구조 패턴
- 더 큰 구조 형성을 목적으로 클래스나 객체의 조합을 다루는 패턴
행위 패턴행위 패턴
- 클래스나 객체들이 상호작용하는 방법과 역할 분담을 다루는 패턴
범위에 따라
클래스 패턴 / 객체 패턴으로 나뉜다.클래스 패턴
- 클래스 간 관련성( 상속 관계를 다루는 패턴 )
- 컴파일 타임에 정적으로 결정
객체 패턴
- 객체 간 관련성을 다루는 패턴
- 런타임에 동적으로 결정
1) 생성 패턴
Builder Pattern
- 복잡한 인스턴스를 조립하여 만드는 구조, 복합 객체를 생성할 때 객체를 생성하는 방법(과정)과 객체를 구현(표현) 하는 방법을 분리함으로써
동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있는 디자인 패턴- 생성과 표기를 분리해서 복잡한 객체를 생성
Prototype Pattern
- 처음부터 일반적인 원형을 만들어놓고, 그것을 복사한 후 필요한 부분만 수정하여 사용하는 패턴, 생성할 객체의 원형을 제공하는 인스턴스에서 생성할 객체들의 타입이 결정되도록 설정하며 객체를 생성할 때 갖추어야 할 기본 형태가 있을 때 사용되는 디자인 패턴
- 기존 객체를 복제함으로써 객체를 생성
- Factory Method Pattern
- 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식으로,
상위 클래스에서는 인스턴스를 만드는 방법만 결정하고,
하위 클래스에서 그 데이터의 생성을 책임지고 조작하는 함수들을 오버라이딩하여 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는 디자인 패턴
- 생성할 객체의 클래스를 국한하지 않고 객체를 생성
Abstract Factory Pattern
- 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
- 이 패턴을 통해 생성된 클래스에서는 사용자에게 인터페이스(API)를 제공하고, 구체적인 구현은 Concrete Product 클래스에서 이루어지는 특징을 갖는 디자인 패턴
- 동일한 주제의 다른 팩토리를 묶음
Singleton Pattern
- 전역 변수를 사용하지 않고 객체를 하나만 생성하ㅗ록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴
- 한 클래스에 한 객체만 존재하도록 제한
Bridge Pattern
- 기능의 클래스 계층과 구현의 클래스 계층을 연결하고,
구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴- 구현뿐만 아니라, 추상화된 부분까지 변경해야 하는 경우 활용
Decorator Pattern
- 기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴으로, 기능 확장이 필요할 때 객체 간의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주어 상속의 대안으로 사용하는 디자인 패턴
- 객체의 결합을 통해 기능을 동적으로 유연하게 확장