[methodology] 디자인 패턴
Updated:
개요
- 설계를 할 때 자주 발생하는 문제들을 해결하기 위해 사용되는 패턴
- 디자인 패턴보다 중요한 것은 코드의 간결성
- 디자인 패턴은 설계 방법을 정리한 코딩 방법론이지 모든 상황의 해결책은 아님
생성(Creational) 패턴
- 추상 팩토리(Abstract Factory)
- 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
- 팩토리 메소드(Factory Method)
- 객체를 만들어 반환하는 객체/함수를 제공하는 패턴
- 다른 객체를 직접 만들어 넘겨주는 객체 제공
- 팩토리 기능을 하는 함수가 자신에게 포함되어 있고 생성자 대신 사용
- 객체를 만들어 반환하는 객체/함수를 제공하는 패턴
- 빌더(Builder)
- 인스턴스를 생성자를 통해 직접 생성하지 않고, 빌더라는 내부 클래스를 통해 간접적으로 생성하게 하는 패턴
- 프로토타입(Prototype)
- 원본(Prototype)을 만들어 놓고 원본 객체를 복사하여 사용하는 패턴
- 싱글톤(Singleton)
- 클래스 내에서 인스턴스가 단 하나뿐임을 보장하는 패턴
구조(Structural) 패턴
- 어댑터(Adapter)
- 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴
- 브리지(Bridge)
- 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴
- 컴포지트(Composite)
- 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴
- 데코레이터(Decorator)
- 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴
- 파사드(Facade)
- 복잡한 호출과정을 대신 처리해주는 wrapper 객체를 따로 만드는 패턴
- 플라이웨이트(Flyweight)
- 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하는 패턴
- 프록시(Proxy)
- 연산을 할 때 객체 스스로가 직접 처리하지 않고 중간에 다른 숨겨진 객체를 통해 처리하는 패턴
행위(Behavioral) 패턴
- 책임 연쇄(Chain of Responsibility)
- 명령 객체와 일련의 처리 객체를 포함하는 패턴
- 커맨드(Command)
- 요청을 객체의 형태로 캡슐화하여 재사용할 수 있게 하는 패턴
- 인터프리터(Interpreter)
- 문장을 평가하는 방법을 지정하는 패턴
- 반복자(Iterator)
- 반복자를 사용하여 컨테이너의 요소들에 접근하는 패턴
- 중재자(Mediator)
- 객체들의 집합이 어떻게 상호작용하는지를 함축해놓은 객체를 정의하는 패턴
- 메멘토(Memento)
- 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 패턴
- 옵저버(Observer)
- 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성하는 패턴
- 상태(State)
- 객체의 상태에 따라 객체의 행위 내용을 변경해주는 패턴
- 전략(Strategy)
- 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
- 템플릿 메소드(Template Method)
- 전체적인 레이아웃을 통일시키지만 상속받은 클래스가 유연성을 가질 수 있게 만드는 패턴
- 방문자(Visitor)
- 알고리즘을 객체 구조에서 분리시키는 패턴