디자인 패턴 이해

설계 중에서 재사용할 경우에 유용한 것을 디자인 패턴으로 정립

객체지향 개념에 따른 설계

  1. 생성 패턴 Creational
    • factory method
    • singleton
    • prototype
    • builder
    • abstract factory
  2. 구조 패턴 Structural
    • decorator
    • adapter
    • composite
    • bridge
    • facade
    • flyweight
    • proxy
  3. 행위 패턴 Behavioral
    • strategy
    • template method
    • iterator
    • visitor
    • mediator
    • chain of responsibility
    • state
    • interpreter
    • observer
    • command
    • memento

생성 패턴 - 생빌 프로 팩앱싱

Builder 빌더 : 복잡한 인스턴스를 조립해 만드는 구조. 복합 객체 생성 시 방법 분리, 서로 다른 표현 결과 만들 수 있음

  • 복잡한 객체의 생성 과정과 표현 방법을 단계별로 분리한다
  • 토핑, 치즈, 도우 등 선택해서 피자를 만드는 과정

Prototype 프로토타입 : 처음부터 일반적인 원형 인스턴스를 만들어 놓고, 그것을 복사(clone)한 후 필요한 부분만 수정해 사용하는 패턴

Factory method 팩토리 메서드 : 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식. 인스턴스 생성을 하위 클래스에 위임함

  • 제품 : 생성하는 객체
  • 제작자 : 제품을 생성하는 팩토리 메서드를 선언한 클래스
  • 구체적인 제작자 : 오버라이드하여 실제 제품 객체를 생성하는 클래스

Abstract factory 추상 팩토리 : 구체적인 클래스에 의존하지 않고 객체 생성 로직과 사용 로직을 분리하고, 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴

  • 제품 : 생성하는 객체의 인터페이스
  • 구체적인 제품 : 제품 인터페이스를 구현할 실제 객체
  • 추상 팩토리 : 제품 객체를 생성하는 메서드의 인터페이스를 제공하는 클래스. 여러 종류의 제품을 생성하는 메서드를 선언
  • 구체적인 팩토리 : 추상 팩토리가 선언한 메서드를 오버라이드하여 실제 제품 객체를 생성하는 클래스

Singleton 싱글톤 : 전역변수를 사용하지 않고, 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

  • 로그 관리, 드라이버 객체, 캐시, 스레드 풀, DB 연결 등 전체 시스템에서 공유해야하는 리소스에 대한 접근을 제어할 때 사용

구조 패턴 - 구 브데 퍼플 프록 컴 어 /  ABCDFFP

Bridge 브리지 : 기능의 클래스 계층과 구현의 클래스 계층을 연결, 구현부에서 추상 계층 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장

Decorator 데코레이터 :  기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나감. 기능 확장이 필요할때

Facade 퍼사드 : 복잡한 시스템에 대해 단순한 인터페이스 제공. 클라이언트와 복잡한 시스템 사이에 퍼사드 객체를 두어 작동방식 단순화,  시스템 구조에 대한 파악 쉽게

Flyweight 플라이웨이트 : 공유를 통해 많은 수의 비슷한 객체들을 효과적으로 지원. 메모리 절약, '클래스의 경량화' 목적

Proxy 프록시 : 실제 객체를 대신하는 대리 객체를 두어 실제 객체에 대한 접근을 제어하는 패턴. 원격 객체 접근, 접근 권한 검사, 객체 생성 지연 등에 활용한다.

Composite 컴포지트 : 객체들의 그룹을 단일객체처럼 다룸. 관계를 트리 구조로 구성, 부분-전체 계층 표현 

Adapter 어댑터 :  기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할. 인터페이스가 호환되지 않는 클래스들이 함께 작동할 수 있음

행위 패턴 - 행 미인이 템옵 상 비커 전 메체

Mediator 미디에이터 : 중간에 통제, 중재자. 객체를 통해 통신. 객체간의 상호작용을 캡슐화하여 객체들이 서로 직접 참조하지 않도록 하는 패턴. 콜리그 Colleague 클래스

Interpreter 인터프리터 : 언어의 문법을 표현식 객체의 구조로 나타내고, 각 표현식이 문맥(Context)을 이용해 문장을 해석하도록 하는 패턴.

  • 추상 표현식 : 공통적인 해석 연산을 선언하는 인터페이스
  • 터미널 표현식 : 문법의 기본요소를 나타내는 클래스, 추상 표현식을 구현
  • 비터미널 표현식 : 문법의 구성요소를 나타내는 클래스, 추상 표현식 구현
  • 문맥 : 인터프리터가 문장을 해석하는 데 필요한 정보를 담고 있는 객체

Iterator 이터레이터 : 컬렉션 구현 방법 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공

Template Method 템플릿 메소드 : 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꿈. 상위(추상) 클래스-골격 제공, 하위(구체) 클래스-세부처리 구체화

Observer 옵저버 : 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고 자동으로 내용이 갱신. 일대다 의존성

State 상태 : 상태에 따라 다르게 처리할 수 있도록 행위 내용 변경

Visitor 비지터 : 객체 구조와 객체에 수행할 연산을 분리하는 패턴. 각 요소는 accept(visitor)를 통해 처리를 Visitor 객체에 위임하므로, 요소 클래스를 변경하지 않고 새로운 연산을 추가할 수 있다.

Command 커맨드 : 요청을 객체로 캡슐화하여 요청을 전달하는 객체와 실행하는 로직을 분리하는 패턴. 구체적인 Command는 필요한 작업을 직접 수행하거나 Receiver에 위임한다.

Strategy 전략 : 알고리즘 군 정의, 행위를 클래스로 캡슐화해 동적으로 상호교환 자유롭게 변환

Memento 메멘토 : 객체의 캡슐화를 유지하면서 특정 시점의 내부 상태를 저장하고 나중에 복원하는 패턴. 실행 취소나 상태 복구 기능에 활용한다.

Chain of Responsibility 책임 연쇄 : 요청을 여러 처리 객체에 순서대로 전달하고, 각 객체가 요청을 처리하거나 다음 객체로 넘기는 패턴. 요청을 보낸 객체와 실제로 처리하는 객체의 결합을 줄인다.