본문 바로가기

디자인 패턴

디자인 패턴 기초

디자인 패턴이란

객체 지향 코딩을 할 때 문제에 대한 해결책을 어떤 방향으로 제시 할것인가를 뜻한다. 

포스팅에서는 GoF의 디자인 패턴책을 참고하여 Creational Pattern , Structural Pattern , Behavioral Pattern으로 나누어서 포스팅 할 예정이다.

  1. patteren name : 한두 단어로 설께 문제와 해법 서술
  2. problem : 해결 하고자 하는 문제와 배경
  3. solution : 문제를 해결하는 추상적인 해결 책을 서술
  4. consequence : 디자인 패턴을 사용하고 얻어지는 결과와 장단점

Design Pattern 기술 요소

  • pattern name and classification
  • 패턴의 핵심을 간결하게 전달
  • intent
  • 디자인 패턴이 의도하는거
  • Also Known As
  • 다르게 불리는 이름
  • Motivation
  • 문제 제시 및 해결 방법을 제시하는 시나리오
  • Applicability
  • 적용할 수 있는 상황과 잘못된 설계 제시, 파악 방법 제시
  • Structure
  • OMT(Object Modeling Technique) 및 UML(Unifiedd Modeling Language)로 클래스를 시각적으로 나타낸 그림
  • Participant
  • 패턴을 구성하고 책임을 수행하는 클래스 및 객체 설명
  • Collaboration
  • 작업을 수행하기위한 개발자들 간의 협력관계 서술
  • Consequence
  • 패턴을 사용할 때의 기대치와 장단점. 다양화 가능성
  • Implementation
  • 패턴을 구현할 때 주의해야 할것 , 힌트 및 특정 언어에서의 주의할 특이사항들
  • Sample Code
  • 주어진 패턴을 실제로 어떻게 구현을 하는지
  • Known Use
  • 실제 사용 사례
  • Related Pattern
  • 밀접한 패턴과 차이점

디자인 패턴 카탈로그

  • Abstract Factory
  • 구체적인 클래스를 만들지 않고 집합단위로 객체들을 생성하는 인터페이스를 제공하는 패턴
  • Adapter
  • 클래스 인터페이스를 사용자가 원하는 형태로 바꿔주는 패턴. 호환성이 없는 인터페이스도 호환되게 만들어 주는 패턴
  • Bridge
  • 추상층을 분리해서 독립적으로 변형할 수 있게 하는 패턴
  • Builder
  • 복합적인 객체의 생성(construct)와 표현 방법을 분리하여 동일한 생성 절차에서 다른 객체가 생성되게 하는 패턴
  • Chain of Responsibility
  • 하나의 요청을 처리할 수 있는 객체를 여러개 만들어 객체와 객체간의 결합을 피하는 패턴. 요청을 받는 객체가 연쇄적으로 묶여 있고, 실제로 처리하는 객체를 만날 때까지 chain을 따라서 요청 전달
  • Command
  • 요청을 객체로 캡슐화 해서 서로 다른 요청의 매개변수화, 요청 저장, 로깅 , 연산의 취소를 지원하게 만드는 패턴
  • Composite
  • 객체들의 관계를 트리로 구성하여 부분 - 전체 계층을 표현하여 사용자가 단일객체와 복합 객체 모두 다루도록 함.
  • Decorator
  • 주어진 상황 및 용도에 따라 특정 객체에 책임을 추가하는 패턴. 기능 확장 할때 서브 클래싱 대신 사용이 가능하다.
  • Facade
  • 서브 시스템에 있는 인터페이스 집합에서 하나의 통합 인터페이스를 지원하는 패턴. 서브 시스템을 사용하기 쉽게 해주는 상위 수준의 인터페이스 정의
  • Factory Method
  • 객체를 생성하는 인터페이스는 미리 정의 되어있으나 인스턴스를 만들 클래스의 결정은 서브 클래스에서 하는 패턴. 인스턴스 만드는 시점이 서브 클래스이다.
  • Flyweight
  • 크기가 작은 객체가 여러개 있을 때, 공유를 해서 효율적으로 만드는 패턴
  • Interpreter
  • 주어진 언어에서 문법을 위한 표현 수단을 정의 하고 해당 언어로 작성된 문장을 해석하는 해석기를 정의하는 패턴
  • Iterator
  • 내부 표현을 노출하지 않고 특정 객체 집합에 속한 원소들을 순차적으로 접근하는 패턴
  • Mediator
  • 한 집합 내에 있는 객체들의 상호작용을 캡슐화하는 객체를 정의하는 패턴. 객체들이 직접적으로 서로 참조하는 걸 피하며, 객차들 사이에 부분집합을 만들어낸다. 결과적으로 객체들의 상호작용이 독립적으로 다양하 됨.
  • Memento
  • 캡슐화를 위배하지 않은 채 객체 내부 의 특정 상태를 실체화 시키고, 객체가 그 상태로 다시 돌아가게 하는 패턴.
  • Observer
  • 객체 사이에 일 대 다의 의존 관계를 정의하고, 특정 객체의 상태가 변할 때 의존성 있는 객체들이 통지 받고 자동으로 갱신되는 패턴
  • Prototype
  • 생성할 객체의 종류를 명세화 할 때 원형이 되는 예시물을 제시하고, 그 원형을 복사하여 새로운 객체를 생성하는 패턴
  • Proxy
  • 다른 객체로 접근하는 것을 통제하기 위해 객체의 surrogate 또는 placeholder를 제공하는 패턴
  • Singleton
  • 모든 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴
  • State
  • 객체 내부 상태에 따라 스스로 행동을 변경하는 걸 허가하는 패턴. 객체가 마치 자신의 클래스는 바꾸는 것처럼 행동.
  • Strategy
  • 동일 계열의 알고리즘 군을 정의 , 캡슐화 하여 이들 간에 상호 교환이 가능하도록 하는 패턴. 알고리즘을 사용하는 사용자와 관계 없이 독립적으로 알고리즘을 다양하게 변경 가능하게 함.
  • Template Method알고리즘 구조 자체는 그대로인체 알고리즘 각 단계의 처리를 서브클래스에서 재정의 가능하다.
  • 객체의 연산에는 알고리즘의 뼈대만 정의하고 각 단계에서의 구체적 연산을 서브클래스에서 정의하는 패턴.
  • Visitor
  • 객체 구조를 이루는 원소에 대해 수행할 연산을 표현하는 패턴. 연산을 적용할 원소의 클래스를 변경하지 않고도 새로운 연산을 정의할 수 있다.

카탈로그 조직화

패턴의 목적에 따른 분류

  • 생성
  • 객체의 생성에 관여
  • 구조
  • 클래스나 객체의 합성
  • 행동
  • 클래스나 객체들이 상호작용합는 방법과 책임 분산
  • 생성에 관련된 패턴
    • 클래스
    • Factory Method
    • 객체BuilderSingleton
    • Prototype
    • Abstract Factory
  • 구조에 관련된 패턴
    • 클래스
    • Adapter
    • 객체BridgeDecoratorFlyweight
    • Proxy
    • Facade
    • Composite
    • Adapter
  • 행동에 관련된 패턴
    • 클래스Template Method
    • Interpreter
    • 객체CommandMediatorObserverStrategy
    • Visitor
    • State
    • Memento
    • Interpreter
    • Chain of Responsibility

객체

  • objectprocedure을 method 또는 operation으로 부름.
  • 객체는 request 또는 message를 받을 시 연산 수행
  • 객체 데이터와 객체 데이터에 가하는 procedure를 함께 가지고 있는 것.
  • request , message
  • object가 연산을 실행하게 하는 유일한 방법.
  • method, operation
  • object 내부 member data를 바꾸는 유일나 방법.
  • 접근의 제약이 생기는 것으로 객체 내부 에 접근하는 걸 제한하는게 encapsulate(캡슐화)라고 함.

인터페이스 명세

  • signature
  • 객체가 선언하는 모든 연산의 이름 , 매개변수 , 연산의 반환값 명세
  • interface객체가 받아서 처리할 수 있는 연산의 집합
  • 객체가 정의하는 연산의 모든 signature을 의미
  • type
  • 특정 인터페이스를 나타내는 것
  • subtype
  • 다른 인터페이스를 상속하는 인터페이스
  • suptertype
  • 다른 인터페이스에게 상속되는 인터페이스

###객체에 요청이 전달 될 때 런타임에 요청에 따라 처리할 객체가 정해지는 걸 dynamic binding이라고 함.

polymorphism(다형성)

동일한 인터페이스를 가지고 있는 객체들간 서로 대체성을 가지는 것.

객체지향 시스템의 핵심.

객체간 의존성을 없애고, 객체간의 관련성이 다양해지게 만들어 준다.

객체 구현 명세

객체의 구현은 class에서 구체화 될때 (OMT 기반의 표기법)

object는 class의 instance이다.

'디자인 패턴' 카테고리의 다른 글

Creational Pattern - Abstract Factory , Builder  (0) 2021.12.08