외규장각 도서 환수 모금 캠페인

'Interesting/Design Pattern'에 해당되는 글 2건

  1. 2012.04.17 디자인 패턴(Design Pattern)이란?
  2. 2012.04.17 Design Patterns

하나의 패턴에는 다음의 네가지 요소는 반드시 들어 있다.


1. 패턴 이름(pattern name)은 한두 단어로 설계 문제와 해법을 서술

2. 문제(Problem)은 언제 패턴을 사용하는가를 서술하며 해결할 문제와 그 배경을 설명

3. 해법(Solution)은 설계를 구성하는 요소들과 그 요소들 간의 관계, 책임 그리고 협력 관계를 서술

4. 결과(Consequence)는 디자인 패턴을 적용해서 얻는 결과와 장단점을 서술


"특정한 전후 관계에서 일반적 설계 문제를 해결하기 위해 상호교류하는 수정 가능한 객체와 클래스들에 대한 설명"



디자인 패턴 영역

   

 목적

 


 생성

 구조 

 행동 

 범위

 클래스 

 팩토리 메서드

 적응자 

 해석자

 템플릿 메서드

   객체

 추상 팩토리
 빌더
 원형
 단일체

 적응자

 가교

 복합체

 장식자

 퍼사드

 플라이급

 프록시

 책임 연쇄
 명령
 해석자
 중재자
 메멘토
 감시자
 상태
 전략
 방문자 





디자인 패턴을 이용하여 문제를 푸는 방법

  1. 객체지향 프로그램은 객체(object)를 만듦
    • 객체는 데이터와 이 데이터에 연산을 가하는 프로시저(procedure)를 함께 묶은 단위
    • 프로시저를 일반적으로 메서드(method) 또는 연산(operation)이라고 함
    • 객체는 요청(request) 또는 메시지(message)를 사용자에게 받으면 연산을 수행
    • 요청은 객체가 연산을 실행하게 하는 유일한 방법
    • 연산은 객체의 내부 데이터의 상태를 변경하는 유일한 방법
    • 이러한 접근의 제약 사항으로 객체의 내부 상태는 캡슐화(encapsulate)된다고 말함.
  2. 적당한 객체 찾기
  3. 객체의 크기 결정
  4. 객체 인터페이스 명세
    • 객체가 선언하는 모든 연산은 연산의 이름, 매개변수로 받아들이는 객체들, 연산의 반환 값 명세. 이를 시그니처(signature)라고 함
    • 인터페이스(interface)는 객체가 정의하는 연산의 모든 시그니처들을 일컫는 말로 객체의 인터페이스는 객체가 받아서 처리할 수 있는 연산의 집합
    • 타입(type)은 특정 인터페이스를 나타낼 때 사용하는 이름. 다른 인터페이스를 포함하는 인터페이스를 서브타입(subtype), 다른 인터페이스가 포함하는 인터페이스를 슈퍼타입(supertype)이라함. 서브타입은 슈퍼타입의 인터페이스를 상속한다고 이야기함. 서브타입이 슈퍼타입을 상속하면 서브타입은 슈퍼타입에 정의된 연산을 포함
    • 어떤 요청과 그 요청을 처리할 객체를 프로그램 실행 중, 즉 런타임에 연결 짓는 것을 동적 바인딩(dynamic binding)이라고 함
    • 다형성(polymorphism)은 런타임에 동일한 인터페이스를 갖는 다른 객체로 대체 가능한 것
  5. 객체 구현 명세하기
    • 객체는 클래스의 인스턴스
    • 클래스의 인스턴스화 과정은 객체의 내부 데이터에 대한 공간 할당, 이 데이터들을 연산과 관련짓는 것
    • 추상클래스는 모든 서브클래스 사이의 공통되는 인터페이스 정의
    • 클래스 상속은 객체의 구현을 정의할 때 이미 정의된 객체의 구현을 바탕으로 진행
    • 인터페이스 상속은 어떤 객체가 다른 객체 대신에 사용될 수 있는 경우를 지정하는 메커니즘
    • 추상 클래스를 정의하고 인터페이스 개념으로 객체를 다룰 때 얻을 수 있는 두가지 이점
      1. 사용자가 원하는 인터페이스를 그 객체가 만족하고 있는 한, 사용자는 그들이 사용하즌 특정 객체 타입에 대해 알아야 할 필요가 없음
      2. 사용자가 이 객체들을 구현하는 클래스를 알 필요가 없고, 단지 인터페이스를 정의하는 추상 클래스가 무엇인지만 알면 됨.
    • 구현이 아닌 인터페이스에 따라 프로그래밍함
  6. 재사용을 실현 가능한 것으로
    • 서브클래싱(클래스 상속)에 의한 재사용은 화이트박스 재사용
    • 객체 합성이 클래스 합성보다 더 나은 방법임
    • 변화에 대비한 설계

패턴과 프레임워크 차이점
  • 디자인 패턴이 프레임워크보다는 더 추상적
  • 디자인 패턴은 프레임워크에 비해서 소규모의 아키텍쳐 요소
  • 디자인 패턴은 프레임워크에 비해 덜 특수화

디자인 패턴을 고르는 방법
  • 패턴이 어떻게 문제를 해결하는지 파악
  • 패턴의 의도 파악
  • 패턴들 간의 관련성 파악
  • 비슷한 목적의 패턴들을 모아서 공부
  • 재설계의 원인을 파악
  • 설계에서 가변성을 가져야 하는 부분이 무엇인지 파악


Posted by 닉네임영역
,

1. 생성 패턴(Creational Patterns)

  • 추상팩토리(Abstract Factory) : 구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴
  • 빌더(Builder) : 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴
  • 팩토리 메서드(Factory Method) : 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브클래스 쪽에서 내리는 패턴. 팩토리 메서드 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브클래스로 미룸
  • 원형(Prototype) : 생성할 객체의 종류를 명세하는 데에 원형이 되는 예시물을 이용하고, 그 원형을 복사함으로써 새로운 객체를 생성하는 패턴
  • 단일체(singleton) : 어떤클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴


2. 구조 패턴(Structural Patterns)

  • 적응자(Adapter) : 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴. 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해 줌
  • 가교(Bridge) : 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴
  • 복합체(Composite) : 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴. 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 함
  • 장식자(Decorator) : 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴. 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있음
  • 퍼사드(Facade) : 서브시스템에 있는 인터페이스 집합에 대해서 하나의 통합된 인터페이스를 제공하는 패턴. 서브시스템을 좀 더 사용하기 편하게 만드는 상위 수준의 인터페이스 정의
  • 플라이급(Flyweight) : 크기가 작은 객체가 여러 개 있을 때, 공유를 통해 이들을 효율적으로 지원하는 패턴
  • 프록시(Proxy) : 어떤 다른 객체로 접근하는 것을 통제하기 위해서 그 객체의 대리자(surrogate) 또는 자리채움자(placeholder)를 제공하는 패턴


3. 행동 패턴(Behavioral Patterns)

  • 책임 연쇄(Chain of Responsibility) : 요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여하여 요청을 보내는 객체와 그 요청을 받는 객체 사이의 결합을 피하는 패턴. 요청을 받을 수 있는 객체를 연쇄적으로 묶고, 실제 요청을 처리할 객체를 만날 때까지 객체 고리를 따라서 요청을 전달
  • 명령(Command) : 요청을 객체의 형태로 캡슐화하여 서로 요청이 다른 사용자의 매개변수화, 요청 저장 또는 로깅, 그리고 연산의 취소를 지원하게 만드는 패턴
  • 해석자(Interpreter) : 주어진 언어에 대해 그 언어의 문법을 위한 표현 수단을 정의하고, 이와 아울러 그 표현 수단을 사용하여 해당 언어로 작성된 문장을 해석하는 해석기를 정의하는 패턴
  • 반복자(Iterator) : 내부 표현부를 노출하지 않고 어떤 객체 집합에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공하는 패턴
  • 중재자(Mediator) : 한 집합에 속해 있는 객체들의 상호작용을 캡슐화하는 객체를 정의하는 패턴. 객체들이 직접 서로를 참조하지 않도록 함으로써 객체들 사이의 소결합(loose coupling)을 촉진시키며, 개발자가 객체들의 상호작용을 독립적으로 다양화시킬 수 있게 만듦
  • 메멘토(Memento) : 캡슐화를 위배하지 않은 채로 어떤 객체의 내부 상태를 잡아내고 실체화시켜, 그 이후에 해당 객체가 그 상태로 되돌아 갈 수 있도록 하는 패턴
  • 감시자(Observer) : 객체들 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 갱신될 수 있게 만드는 패턴
  • 상태(State) : 객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게끔 허가하는 패턴. 이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보임
  • 전략(Strategy) : 동일 계열의 알고리즘군을 정의하고, 각각의 알고리즘을 캡슐화하며, 이들을 상호 교환이 가능하도록 만드는 패턴. 알고리즘을 사용하는 사용자와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 함.
  • 템플릿 메서드(Template Method) : 객체의 연산에는 알고리즘의 뼈대만을 정의하고 각 단계에서 수행할 구체적 처리는 서브클래스 쪽으로 미루는 패턴. 알고리즘의 구조 자체는 그대로 놔둔 채 알고리즘 각 단계의 처리를 서브클래스에서 재정의할 수 있게 함.
  • 방문자(Visitor) : 객체 구조를 이루는 원소에 대해 수행할 연산을 표현하는패턴. 연산을 적용할 원소의 클래스를 변경하지 않고도 새로운 연산을 정의할수 있게함



Posted by 닉네임영역
,


사랑합니다. 편안히 잠드소서