반디북
자바스크립트 + 리액트 디자인 패턴
Ch6
도은

디자인 패턴의 세 가지 주요 유형과 각 유형에 속하는 다양한 패턴을 살펴보자

6.1 배경

  • GoF의 디자인 패턴에서 디자인 패턴을 다음과 같이 설명한다.

디자인 패턴은 공통 설계 구조의 핵심 요소를 이름 짓고 추상화여 재사용할 수 있는 객체 지향 설계를 만드는 데 유용한 역할을 합니다. 또한 유용한 클래스 인스턴스를 제공하여 각각의 역할과 엽업, 책임의 분배를 실현합니다.
모든 디자인 패턴은 특정 객체 지향 설계의 문제나 이슈에 초점을 맞춥니다. 또한 어디에 적용될 수 있는지, 다른 설계 조건에도 부합하는지, 사용함으로써 얻는 장단점과 결과를 설명합니다. 결국에는 구현이 중요하기에 구현을 위한 예시 코드도 제공합니다.

  • 디자인 패턴은 어떤 문제를 해결하느냐에 따라 다음 세 가지 유형으로 분류된다.
    • 생성 패턴
    • 구조 패턴
    • 행위 패턴

6.2 생성 패턴

  • 주어진 상황에 적합한 객체를 생성하는 방법에 중점
  • 생성자, 팩토리, 추상, 프로토타입, 싱글톤, 빌더 패턴

6.3 구조 패턴

  • 객체의 구성과 각 객체 간의 관계를 인식하는 방법에 중점
  • 어느 한 부분이 변경되더라도 다른 부분에는 영향이 가지 않도록 도와준다.
  • 설계 목적에 맞지 않는 부분을 개선하는 데에도 도움
  • 데코레이터, 퍼사드, 플라이웨이트, 어댑터, 프록시 패턴

6.4 행위 패턴

  • 시스템 내의 객체 간 커뮤니케이션을 개선하거나 간소화하는 방법에 중점
  • 객체 간의 공통적인 커뮤니케이션 패턴을 감지하고 책임을 분배함으로써 커뮤니케이션의 유연성을 높이고 객체의 행위를 추상화
  • 이터레이터, 중재자, 관찰자, 방문자 패턴

6.5 디자인 패턴의 분류

생성 패턴객체 생성의 기반이 되는 개념
팩토리 메서드인터페이스를 기반으로 여러 파생 클래스를 생성
추상 팩토리구체적인 내부 구현 없이 여러 클래스가 상속받아 사용하는 인스턴스를 생성
빌더객체를 생성하는 부분과 내부 구현을 분리하여 항상 같은 객체를 생성
프로토타입복사 또는 복제에 사용되는 초기화된 인스턴스
싱글톤전역에서 접근 가능한 하나의 인스턴스를 가진 클래스

| 구조 패턴 | 객체 구조의 기반이 되는 개념 | | :----------- | :----------------------------------------------------------- | --- | | 어탭터 | 호환되지 않는 인터페이스가 상호작용되도록 클래스를 매치 | | 브릿지 | 객체의 인터페이스와 구현을 분리하여 독립적으로 구성 | | 컴포지트 | 단순히 합친 상태 이상의 효율을 내는 간단하면서 복합적인 구조 | | 데코레이터 | 객체에 새로운 프로세스를 동적으로 추가 | | 퍼사드 | 전체 시스템의 복잡한 부분을 숨기는 단일 클래스 | | 플라이웨이트 | 여러 객체에 공통 상태를 공유하는 세분화된 인스턴스 | | | 프록시 | 실제 객체를 대신하는 대체 객체 |


행위 패턴객체 상호작용의 기반이 되는 개념
인터프리터언어의 목적과 문법에 일치하는 언어 요소를 포함시키는 방법
템플릿 메서드상위 클래스에서 기본 구조를 생성한 다음 하위 클래스에서 구체적으로 정의
책임 연쇄요청을 처리할 수 있는 객체를 찾기 위해 체인 간의 요청을 전달
커맨드호출 부분과 실행 부분을 나누는 방법
이터레이터내부 구조를 모른 채 요소에 순차적으로 접근
중재자클래스가 서로를 직접적으로 참조하지 않도록 중간에 간소화된 커뮤니케이션을 정의
메멘토나중에 복구할 수 있도록 객체의 내부 상태를 저장
관찰자클래스 간의 일관성을 보장하기 위해 여러 클래스의 변경사항을 알리는 방법
상태상태가 변경되면 객체의 행위도 변경
전략클래스 내부에 알고리즘 구현을 캡슐화하여 상황에 따른 선태과 구현을 분리
방문자클래스를 변경하지 않고도 새로운 작업을 추가