728x90
반응형
디자인 패턴 정의
디자인 패턴 (Design Pattern)이란,
소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다.
디자인 패턴 요약 설명
디자인 패턴에는 23가지 패턴이 있는데 이것을 3가지 유형으로 분류한다.
구분 | Creational Pattern (생성 패턴) |
Structural Pattern (구조 패턴) |
Behavioral Pattern (행위 패턴) |
|
의미 | 객체의 생성 방식을 결정하는 패턴 |
Object를 조직화 하는 데 유용한 패턴 |
Object의 행위를 Organize, Manage, Combine 하는 데 사용되는 패턴 | |
범위 | 클래스 | Factory Method | Adapter(class) | Interpreter, Template Method |
객체 | Abstract Factory, Builder, Prototype, Singleton |
Adapter(object), Bridge, Composite, Decorator, Facade, Flyweight, Proxy |
Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Visitor |
생성 패턴 (Creational Pattern)
- 객체를 생성 혹은 조합하는데 관련된 패턴
- 객체가 생성되는 과정의 유연성을 높이고 코드의 유지를 쉽게 한다.
- 싱글톤 (Singleton)
: 유일한 하나의 인스턴스를 보장하도록 하는 패턴
--> 하나 이상의 인스턴스가 생성되지 않는 클래스를 의미 - 빌더 (Builder)
: 생산 단계를 캡슐화하여 구축 공정을 동일하게 이용하도록 하는 패턴 - 팩토리 메서드 (Factory Method)
: 객체 생성을 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화 될 것인지 서브 클래스가 결정하도록 하는 패턴 - 추상 팩토리 (Abstract Factory)
: 관련된 객체들을 하나에 모아놓고 팩토리 중에서 선택하게 하는 패턴 - 프로토타입 (Prototype)
: 복사 or 복제하여 새로운 개체를 생성할 수 있도록 해주는 패턴
구조 패턴 (Structural Pattern)
- 클래스나 객체의 조합을 다루어 더 큰 구조를 만드는 패턴
- 프로그램 구조(자료구조, 인터페이스 구조 등)를 설계하는데 활용할 수 있다.
- 어댑터 (Adaptor)
: 사용하지 못하는 클래스를 인터페이스로 인해 함께 사용하도록 하는 패턴 - 브릿지 (Bridge)
: 하나의 계층 구조가 아닌 구현과 추상으로 계층을 분리하여 결합도를 낮춘 (각각 독립적인 변형 및 확장 가능) 패턴 - 컴포지트 (Composite)
: 개별 객체(composite)와 복합 객체(component)를 클라이언트(사용자)가 동일하게 사용하도록 하는 패턴 - 데코레이터 (Decorator)
: 동적으로 객체에 새로운 책임, 신뢰성을 추가할 수 있게 하는 패턴,
기존 코드를 변형하지 않고 부가 기능을 추가할 수 있는 패턴 - 퍼사드 (Facade)
: 하나의 인터페이스를 통해 느슨한 결합을 제공하는 패턴 - 플라이웨이트 (Flyweight)
: 대량의 작은 객체들을 공유하는 패턴,
많은 인스턴스를 생성하는 어플리케이션에서 인스턴스를 재사용할 수 있도록 하는 패턴
--> 메모리의 효율성 높임 - 프록시 (Proxy)
: 대리인이 대신 그 일을 처리하는 패턴,
특정 객체에게 프록시를 통해서만 접근하여 명령하도록 하는 패턴
행위 패턴 (Behavioral Pattern)
- 클래스나 객체들이 상호작용하는 방법과 역할 분담을 다루는 패턴
- 책임연쇄 (Chain of Responsibility)
: 책임마다 클래스를 체인식으로 분리시켜 특정 클래스가 많은 책임을 가지고 요청 처리할 때 나눠서 처리하도록 하는 패턴 - 커맨드 (Command)
: 요청을 캡슐화하여 요청을 호출자(Invoker)와 수신자(Receiver)로 분리하는 패턴 - 인터프리터 (Interpreter)
: 문법 규칙을 클래스화 한 구조로 자주 등장하는 문제를 별개의 언어로 정의하고 재사용하는 패턴 - 이터레이터 (Iterator)
: 내부 구조 (컬렉션 구현 방법)를 노출시키지 않으면서 그 내부 집합 객체를 순회하는 패턴 - 미디에이터 (Mediator)
: 객체 간 의사소통을 통제하는 중재자를 두고 그 중재자를 통해 통신하는 패턴 - 메멘토 (Memento)
: 객체 내부 상태를 외부에 저장해놓고 이후에 필요할 때 복원하여 사용하는 방식의 패턴 - 옵저버 (Observer)
: 객체들의 상태 변화를 감지하고 그에 따라 다른 객체들이 반응 감지하는 패턴 - 스테이트 (State)
: 객체의 내부 상태에 따라 행동을 변화시키는 방법의 패턴 - 전략 (Strategy)
: 알고리즘들이 있을 때 이것을 각각 하나의 클래스로 캡슐화하여 서로 교환하며 사용할 수 있도록 하는 패턴 - 템플릿 메서드 (Template Method)
: 알고리즘 구조를 템플릿 형태로 슈퍼 클래스에서 제공함으로써 전체 일을 수행하는 구조는 그대로이면서 그 템플릿에서 어떤 작업을 처리하기 위해 구현이 달라야하는 부분은 서브 클래스로 캡슐화하면서 특정 단계에서 수행하는 내역을 바꾸는 패턴 - 비지터 (Visitor)
: 객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장하는 방법으로 사용하는 패턴
추후에는 디자인 패턴을 활용한 코드들을 알아보자! :D
<참고>
- realzero0.github.io/study/2017/06/12/디자인-패턴-정리.html
- velog.io/@poiuyy0420/디자인-패턴-개념과-종류
- gyrfalcon.tistory.com/entry/디자인패턴-정리
- https://github.com/Youngerjesus/design-pattern
728x90
반응형