반응형
디자인 패턴이란?
- OOP 설계를 할 때, 자주 발생하는 문제들을 피하기 위해 사용되는 패턴
- 효율적인 코드를 만들기 위한 방법론! 즉, 클린 아키텍처를 위한 전략, 전술
디자인 패턴의 종류
생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하기 위한 패턴
- 객체의 생성과 조합을 캡슐화해, 특정 객체가 생성, 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공하기 위한 것을 목표로 둔다
- 싱글톤(Singleton) : 클래스에서 하나의 객체만 생성, 그 하나의 객체는 어디든 참조가능 하나, 동시 참조는 불가. 전역적인 접근점을 제공하는 패턴으로, 디자인 패턴의 가장 많이 알려진 패턴
- 프로토타입(Prototype) : 원본 객체를 복제하는 방법으로 객체를 생성하는 패턴
- 팩토리 메서드(Factory method) : 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화하나, 생성을 정의하는 것은 인터페이스가 하는 패턴
- 추상 팩토리 (Abstrct Factory) : 구체적인 클래스에 의존하지 않으며, 서로 연관 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
- 빌더(Builder) : 복합 객체의 생성 과정과 표현 방법을 분리하여, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게하는 패턴
구조 패턴
- 구조가 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여, 더 큰 구조로 만드는 패턴
- 예를 들어, 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 새로운 기능을 제공
- 어댑터(Adaptor) : 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환하는 패턴
- 브릿지(Bridge) : 구현부에서 추상층 분리, 서로 독립적으로 확장하는 패턴
- 컴포지트(Composite) : 객체들의 관계를 트리구조로 구성하여 부분 - 전체 계층을 표현, 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이, 다루고자 할 때, 사용되는 패턴
- 데코레이터(Decorator) : 객체 간의 결합을 통해, 능동적으로 기능등을 확장하는 패턴
- 퍼사드(Facade) : 복잡한 서브 클래스들을 피해, 더 상위에 인터페이스를 구성, 서브 클래스들의 기능을 간편하게 사용할 수 있게하는 패턴
- 플라이웨이트(Flyweight) : 인스턴스가 필요할 때 마다, 매번 생성X, 가능한 공유해서 사용함으로써, 메모리 절약하는 패턴
- 프록시(Proxy) : 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행, 다른 객체의 접근을 통제하기위해 사용하는 패턴
행위 패턴
- 객체나 클래스 사이의 알고리즘, 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 여러 객체를 어떻게 분배할지 또 객체 사이의 결합도를 최소화하는 것에 중점을 두는 패턴
- 옵저버(Observer) : 한 객체의 상태가 변화하면, 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 상태(State) : 객체의 상태에 따라 동일한 동작을 다르게 처리해야할 때 사용하는 패턴
- 방문자(Visitor) : 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스 구성, 객체의 구조를 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용하는 패턴
- 커맨드(Commend) : 요청(요구사항)을 객체의 형태로 캡슐화하여, 재 이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장, 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 특징을 가진 패턴
- 전략(Strategy) : 동일한 계열의 알고리즘들을 캡슐화하여 상호 교환 할 수 있게 정의, 행위 객체를 클래스로 캡슐화해 동적으로 행위를 자유롭게 변환하는 패턴
- 메멘토(Memento) : 클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴으로 Undo 기능을 개발할 때, 사용하는 패턴, 객체를 이전 상태로 복구시켜야할 때, Undo 사용
- 책임연쇄(Chain of Responsibility): 하나의 요청을 2개 이상 객체에서 처리할 때, 사용 -> 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태 정적으로 어떤 기능에 대한 처리의 연결이 하드코딩 되어 있을 때 기능 처리의 연결 변경이 불가능한데, 이를 동적으로 연결되어 있는 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴
- 인터프리터(Interpreter): 언어에 문법 표현을 정의한 패턴, 문법 자체를 캡슐화 하여 사용
- 반복자(Iterator): 자료구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용할 수 있는 패턴,내부구조를 노출하지 않고, 복잡 객체의 원소를 순차적으로 접근 가능하게 해주는 행위 패턴
- 중재자(Mediator): 수 많은 객체들 간의 복잡한 상호작용을 캡슐화하여 정의한 패턴. 객체지향 설계에서 객체의 수가 너무 많아지면 서로 간 통신을 위해 복잡해져서 해당 객체 사용을 통해 결합도 줄임
- 템플릿 메서드(Template Method): 상위 클래스에서 골격을 정의, 하위 클래스에서 세부 처리를 구체화하는 패턴
반응형
'CS, 알고리즘 > CS' 카테고리의 다른 글
객체지향, 함수형, 반응형 프로그래밍 (0) | 2023.09.11 |
---|