본문 바로가기
CS, 알고리즘/CS

[Design Pattern] 디자인 패턴

by 최지철 2023. 9. 24.
728x90
반응형

디자인 패턴이란?

  • OOP 설계를 할 때, 자주 발생하는 문제들을 피하기 위해 사용되는 패턴
  • 효율적인 코드를 만들기 위한 방법론! 즉, 클린 아키텍처를 위한 전략, 전술

 

디자인 패턴의 종류

생성 패턴

  • 클래스나 객체의 생성과 참조 과정을 정의하기 위한 패턴
  • 객체의 생성과 조합을 캡슐화해, 특정 객체가 생성, 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공하기 위한 것을 목표로 둔다
  1. 싱글톤(Singleton) : 클래스에서 하나의 객체만 생성, 그 하나의 객체는  어디든 참조가능 하나, 동시 참조는 불가. 전역적인 접근점을 제공하는 패턴으로, 디자인 패턴의 가장 많이 알려진 패턴
  2. 프로토타입(Prototype) : 원본 객체를 복제하는 방법으로 객체를 생성하는 패턴
  3. 팩토리 메서드(Factory method) : 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화하나, 생성을 정의하는 것은 인터페이스가 하는 패턴
  4. 추상 팩토리 (Abstrct Factory) : 구체적인 클래스에 의존하지 않으며, 서로 연관 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
  5. 빌더(Builder) : 복합 객체의 생성 과정과 표현 방법을 분리하여, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게하는 패턴

구조 패턴

  • 구조가 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여, 더 큰 구조로 만드는 패턴
  • 예를 들어, 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 새로운 기능을 제공
  1. 어댑터(Adaptor) :  호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환하는 패턴
  2. 브릿지(Bridge) :  구현부에서 추상층 분리, 서로 독립적으로 확장하는 패턴
  3. 컴포지트(Composite) : 객체들의 관계를 트리구조로 구성하여 부분 - 전체 계층을 표현, 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이, 다루고자 할 때, 사용되는 패턴
  4. 데코레이터(Decorator) : 객체 간의 결합을 통해, 능동적으로 기능등을 확장하는 패턴
  5. 퍼사드(Facade) :  복잡한 서브 클래스들을 피해, 더 상위에 인터페이스를 구성, 서브 클래스들의 기능을 간편하게 사용할 수 있게하는 패턴
  6. 플라이웨이트(Flyweight) : 인스턴스가 필요할 때 마다, 매번 생성X, 가능한 공유해서 사용함으로써, 메모리 절약하는 패턴
  7. 프록시(Proxy) :  접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행, 다른 객체의 접근을 통제하기위해 사용하는 패턴

행위  패턴

  • 객체나 클래스 사이의 알고리즘, 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
  • 여러 객체를 어떻게 분배할지 또 객체 사이의 결합도를 최소화하는 것에 중점을 두는 패턴
  1. 옵저버(Observer) : 한 객체의 상태가 변화하면, 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴
  2. 상태(State) : 객체의 상태에 따라 동일한 동작을 다르게 처리해야할 때 사용하는 패턴
  3. 방문자(Visitor) : 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스 구성, 객체의 구조를 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용하는 패턴
  4. 커맨드(Commend) :  요청(요구사항)을 객체의 형태로 캡슐화하여, 재 이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장, 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 특징을 가진 패턴
  5. 전략(Strategy) : 동일한 계열의 알고리즘들을 캡슐화하여 상호 교환 할 수 있게 정의, 행위 객체를 클래스로 캡슐화해 동적으로 행위를 자유롭게 변환하는 패턴
  6. 메멘토(Memento) : 클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴으로 Undo 기능을 개발할 때, 사용하는 패턴, 객체를 이전 상태로 복구시켜야할 때, Undo 사용
  7. 책임연쇄(Chain of Responsibility): 하나의 요청을 2개 이상 객체에서 처리할 때, 사용 -> 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태 정적으로 어떤 기능에 대한 처리의 연결이 하드코딩 되어 있을 때 기능 처리의 연결 변경이 불가능한데, 이를 동적으로 연결되어 있는 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴
  8. 인터프리터(Interpreter): 언어에 문법 표현을 정의한 패턴, 문법 자체를 캡슐화 하여 사용
  9. 반복자(Iterator): 자료구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용할 수 있는 패턴,내부구조를 노출하지 않고, 복잡 객체의 원소를 순차적으로 접근 가능하게 해주는 행위 패턴
  10. 중재자(Mediator): 수 많은 객체들 간의 복잡한 상호작용을 캡슐화하여 정의한 패턴. 객체지향 설계에서 객체의 수가 너무 많아지면 서로 간 통신을 위해 복잡해져서 해당 객체 사용을 통해 결합도 줄임
  11. 템플릿 메서드(Template Method): 상위 클래스에서 골격을 정의, 하위 클래스에서 세부 처리를 구체화하는 패턴

 

728x90
반응형

'CS, 알고리즘 > CS' 카테고리의 다른 글

객체지향, 함수형, 반응형 프로그래밍  (0) 2023.09.11