디자인 패턴(Design Pattern)
디자인 패턴은 개발하면서 반복적으로 발생하는 문제들을 어떻게 해결할 것인지에 대한 해결 방안이다.
패턴은 새로운 것이 아닌 "비슷한 문제를 다루면서 얻은 노하우가 매우 잘 정리된 것"이다.
이러한 패턴은 UML 도구인 클래스 다이어그램, 순차 다이어그램 등으로 구조와 동작을 가시적으로 표현할 수 있다.
패턴은 총 23가지이며, 3가지 종류(생성 패턴 / 구조 패턴 / 행위 패턴)로 나뉜다.
생성 패턴(Creational Pattern)
생성 패턴은 객체 인스턴스를 생성하는 패턴이다.
객체 생성과 그 참조 과정을 캡슐화하여 코드의 유연성과 재사용성을 높여준다.
5가지의 생성 패턴이 존재한다.
| 싱글톤(Singleton) | 한 클래스의 인스턴스를 한 번만 생성하여 전역에서 접근 가능하게 하는 패턴 |
| 팩토리 메소드(Factory Method) | 객체 생성 인터페이스만 제공하고, 실제 인스턴스 생성은 하위 클래스에서 담당하는 패턴 |
| 추상 팩토리(Abstract Factory) | 관련된 객체들의 집합을 생성하는 인터페이스를 제공하고, 구체적인 팩토리 클래스는 하위 클래스에서 생성하는 패턴 |
| 빌더(Builder) | 복잡한 객체를 단계 별로 구성하여 생성하는 패턴 |
| 프로토타입(Prototype) | 기존 객체를 복제해서 새 객체를 생성하는 패턴 |
구조 패턴(Structural Pattern)
구조 패턴은 클래스나 객체를 조합하여 더 큰 구조를 형성하는 패턴으로,
총 7개의 패턴이 있다.
| 어댑터(Adpater) | 호환성이 없는 클래스의 인터페이스를 다른 클래스가 이용할 수 있도록 변환해주는 패턴 |
| 브리지(Bridge) | 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성한 패턴 |
| 컴포지트(Composite) | 객체들의 관계를 트리 구조로 구성하여 전체-부분 계층을 표현하는 패턴 |
| 데코레이터(Decorator) | 객체에 동적으로 새로운 책임을 추가하여 기능들을 확장할 수 있는 패턴 |
| 퍼싸드(Facade) | 복잡한 하위 클래스들에 대해서 간단한 인터페이스를 제공하는 패턴 |
| 플라이웨이트(FlyWeight) | 인스턴스의 공유를 통해 메모리를 절약하는 패턴 |
| 프록시(Proxy) | 접근이 어려운 객체에 접근할 수 있도록 인터페이스 역할을 제공하는 패턴 |
행위 패턴(Behavior Pattern)
행위 패턴은 객체들이 서로 상호작용(통신)하는 방법이나 책임을 분배하는 방법을 정의한 패턴이다.
책임을 분배함으로써 결합도를 최소화하는 것이 목표이며, 총 11개의 패턴이 있다.
| 책임 연쇄(Chain of Responsibility) | 둘 이상의 객체가 서로 연결되어 책임이 차례대로 넘어가는 패턴 |
| 커맨드(Command) | 요청에 필요한 정보를 객체로 캡슐화하여 로그에 기록하는 패턴 |
| 인터프리터(Interpreter) | 언어의 문법 표현을 정의하는 패턴 |
| 반복자(Iterator) | 접근이 잦은 객체는 동일한 인터페이스를 사용하는 패턴 |
| 중재자(Mediator) | 수많은 객체들 간의 복잡한 상호작용을 캡슐화해서 객체로 정의하는 패턴 |
| 메멘토(Memento) | 특정 시점의 상태를 객체화하여, 필요할 때 해당 시점의 객체로 되돌리는 패턴(undo 기능) |
| 옵서버(Observer) | 객체의 상태의 변화를 상속 중인 다른 객체들에게 알리는 패턴 |
| 상태(State) | 객체의 상태에 따라 이벤트(행위)를 달리해야 하는 패턴 |
| 전략(Strategy) | 알고리즘을 객체의 행위로 캡슐화하여, 동일한 행동을 다른 알고리즘으로 교환할 수 있는 패턴 |
| 템플릿 메소드(Template Method) | 상위 클래스에서 골격을 정의하고, 하위 클래스에서 세부 처리를 구체화하는 패턴 (생성 패턴의 팩토리 메소드와 유사) |
| 방문자(Visitor) | 객체의 구조와 기능을 분리하여 구조를 변경하지 않고 새로운 기능을 추가할 수 있는 패턴 |
디자인 패턴의 수가 정말 많다! 하지만 이 패턴들은 모두 신뢰성있고 융통성있는 설계를 지향한다.
앞으로 하나씩 차차 알아가보려 한다.
:)
출처
https://ittrue.tistory.com/550
https://www.hanbit.co.kr/channel/view.html?cmscode=CMS8616098823
'Java > 디자인패턴' 카테고리의 다른 글
| [Design Pattern] SOLID 원칙 (1) | 2025.08.05 |
|---|