2015년 11월 9일 월요일

클래스 디자인 패턴 0. Design Pattern 서두 (GoF 디자인 패턴 1장 내용)

ps. 글 작성시 참고한 사항
   GoF 디자인 패턴 의 서두 부분
https://ko.wikipedia.org/wiki/%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4_(%EC%B1%85)

   알라딘 책 설명
http://www.aladin.co.kr/shop/wproduct.aspx?ISBN=8945072144?partner=googlek&EKAMS=realclick.757.2659.141.1406787890725.2242158&trackingDays=1&gclid=CIKkusPPgskCFYGbvAod4U8NPg


1. 의미
    프로그램 작성시 재사용이 가능한 경험을 정리 한것


2. 이론
  1) 디자인 패턴이 포함해야 할 사항들
    디자인 패턴의 이름
    특정 상황에서 자주 발생하는 문제 정의
    이를 해결하는 방법 및 과정
    해결 결과

  2) 작성 목적
    디자인 패턴은 생성, 구조, 행동 의 목적을 지니고 작성된다.

  3) 프로그램
    프로그램은 객체(또는 객체들)로 만들어진다.

  4) 객체
    객체는 데이터와 프로시저(method, 기능) 의 집합이며
      이 객체는 사용자 요청에 의해 데이터 내용이나 프로시저를
      사용자에게 제공하게 된다.

  5) 프로그램 설계시 전반적인 측면에서 고려할 사항
    캡슐화
    크기 정하기
    종속성
    유연성
    성능
    변경 가능성 혹은 진화
    재사용성

  6) 타입
    특정 인터페이스를 나타낼 때 사용함
    A 타입은 A interface에 정의한 method 를 다 처리가능함을 나타냄
    (1) 서브타입 : 다른 인터페이스를 포함하는 인터페이스
    (2) 슈퍼타입 : 서브타입의 반대개념

  7) 동적 바인딩
     요청 + 요청에 대한 처리 객체를 뭘로 연결할지
      실행하는 시점에서 결정하는 것
      이게 되는걸 가지고 다형성 이라는 표현을 쓴다.

  8) 클래스
     구현을 명세(정의) 해 놓은것
     객체의 내부 데이터, 표현 방법, 연산을 정의함

  9) 객체
     클래스를 인스턴스로 만듬으로서 생성됨
     = 클래스의 인스턴스
      객체의 내부 데이터에 대해서 메모리내 공간을 할당하고
      상태 및 연산을 처리할 수 있게 함

  10) 클래스 상속
    다른 기존 클래스를 기반으로하는 클래스를 생성가능함
    (1) 부모클래스 : 기존 클래스
    (2) 서브클래스 : 기존 클래스를 기반으로 생성한 클래스

  11) 추상 클래스
    일부는 interface 일부는 구현함
      다만 미구현 부분이 있기 때문에 인스턴스 생성이
      불가한 클래스
   
  12) 구체 클래스 : 추상 클래스의 반대개념

  13) 오버라이드
    서브 클래스에서 상속받은 연산을 재정의 하는 경우
      이를 오버라이드 라고 함

  14) 클래스 상속과 인터페이스 상속
    (1) 클래스 상속
      미리 정의된 객체를 바탕으로 작성
      클래스를 그대로 쓰고자 할때 좋다.
      재구현을 할 필요가 없다.
      부모 클래스 변경시 작식 클래스도 같이 변경된다.
    (2) 인터페이스 상속
      어떤 객체가 다른 객체 대신에 사용할 수 있는지 지정
      기능이 다른 경우에도 호환이 되야 되는경우 사용
      재구현을 해야되지만 변경에 대해 클래스 상속보다 자유롭다.

  15) 내가 사용해야 할 디자인 패턴을 고르는 방법
    (1) 패턴이 문제를 해결하는 과정을 파악
    (2) 패턴의 의도를 확인
    (3) 패턴들간 관련성을 확인
    (4) 비슷한 패턴을 학습
    (5) 내가 작성중인 프로그램 재설계의 원인은?
    (6) 이후 필요한 변경(가변성)은 무엇인지 확인


3. 패턴의 이름, 의미, 분류
-----------생성에 관련된 패턴 Creational Patterns ------------
  1) 추상 팩토리 Abstract Factory
     구체적인 클래스 지정하지 않고 작성,
       이때 관련성있는 객체를 묶거나 서로 독립적이긴 하나
       업무적으로 필요한 객체를 묶도록 인터페이스를 제공하는 패턴
http://magmajjame.blogspot.kr/2015/10/15-abstract-factory-pattern.html

  2) 빌더 Builder
     객체 표현과 생성을 분리하여
       같은 생성 방법으로 때에 따라 다른 객체를
       생성하도록 제어하는 패턴
http://magmajjame.blogspot.kr/2015/10/14-builder.html

  3) 팩토리 메서드 Factory Method
    인터페이스는 미리 정리해 놓되 실제 구현 클래스는
      서브 클래스에서 결정하도록 생성을 위임하는 방법
http://magmajjame.blogspot.kr/2015/08/4-factory-pattern.html

  4) 원형 Prototype
    객체 생성이 복잡한 경우, 또는 해당 객체의 초기값이
      계속 사용되어야 하는 경우 이를 처음 객체를 생성해 놓고
      이를 복사한 새로운 객체를 프로그램에서
      사용하도록 제어하는 패턴
http://magmajjame.blogspot.kr/2015/10/13-prototype-pattern.html

  5) 단일체 Singleton
     객체를 하나만을 가지고 여러 자원에서 활용해야하는경우
       해당 객체 생성은 1번만 하고 이 인스턴스를
       여러 지점에서 접근할 수 있도록 접촉점을 제공하는 패턴
http://magmajjame.blogspot.kr/2015/08/5-singletone-pattern.html


-----------구조에 관련된 패턴 Structural Patterns ------------
  6) 적응자 Adapter
    다른 호환되지 않는 클래스를 사용자가 원하는
      형태의 객체로 동작하도록 도와주는 패턴
http://magmajjame.blogspot.kr/2015/09/7.html

  7) 가교 Bridge
    구현부의 추상층을 분리하여 각자 독립적이거나 다른
      구현 및 변형이 가능도록 하는 패턴
http://magmajjame.blogspot.kr/2015/10/16-bridge-pattern.html

  8) 복합체 Composite
    객체는 트리 구조로 구성되어 있는 상태에서 사용자가
      단일, 복합 객체 모두 접근할 수 있도록 작성한 패턴
http://magmajjame.blogspot.kr/2015/10/17-composite-pattern.html

  9) 장식자 Decorator
    상황, 용도를 기존 객체에 추가해 다시 만드는 방법으로
      객체에 기능을 확장하는 패턴
http://magmajjame.blogspot.kr/2015/06/3.html

  10) 퍼사드 Facade
    서브 시스템의 자원을 통합한 상위 단위의 인퍼테이스를
      제공하는 패턴
http://magmajjame.blogspot.kr/2015/10/7-2-facade-pattern.html

  11) 플라이급 flyweight
     객체를 공유하여 메모리 소모를 줄이는 패턴
http://magmajjame.blogspot.kr/2015/11/22-flyweight-pattern.html

  12) 프록시 Proxy
     직접 객체로 접근하는것을 방지하고 다른 경로로
       통제된 상태로 해당 객체의 허가된 자원을
       접근할 수 있도록 하는 패턴
http://magmajjame.blogspot.kr/2015/09/11-proxy-pattern.html

-----------행동에 관련된 패턴 Behavioral Patterns ------------
  13) 책임 연쇄 Chain of Responsibility
    요청이 어느 객체에 해당되는지에 대한 판단을 해서
      해당 요청을 처리하는 책임연쇄 기능을 작성하여
      하나의 요청으로 여러 요청을 처리할 수 있게 작성하는 패턴
http://magmajjame.blogspot.kr/2015/10/19-chain-of-responsibility-pattern.html

  14) 명령 Command
    요청을 객체 형태로 캡슐화 하고 몇가지 요청, 로깅, 연산 취소 등의
      기능을 추가함
http://magmajjame.blogspot.kr/2015/09/6-command-pattern.html

  15) 해석자 Interpreter
    정의 언어 표현수단과 이를 해석하여 실행하는 해석기
      정의를 포함한 패턴
http://magmajjame.blogspot.kr/2015/11/23-interpreter-pattern.html

  16) 반복자 Iterator
    어떤 객체의 원소(데이터나 인스턴스집합)을
      순차적으로 접근할 수 있게 작성하는 패턴
http://magmajjame.blogspot.kr/2015/09/9-iterator-pattern.html

  17) 중재자 Mediator
    서로 참조해야 하는 또는 한 집합의 객체를 직접 참조하지
      않도록 중간에 중재자를 정의하여 공유 객체에서
      이를 중재하도록 하는 패턴
http://magmajjame.blogspot.kr/2015/11/20-mediater-pattern.html

  18) 메멘토 Memento
    뒤로가기 기능을 정의하는 패턴
http://magmajjame.blogspot.kr/2015/11/21-memento-pattern.html

  19) 감시자 Observer
    공유해야 할 데이터를 한곳에서 수정하고
      내용을 필요로 하는 다른 여러곳으로 공유하는 패턴
http://magmajjame.blogspot.kr/2015/06/2-observer-pattern.html

  20) 상태 State
    객체 상태 값에 따라 다른 응답이나 요청을 실행할 수 있도록
      설정한 패턴
http://magmajjame.blogspot.kr/2015/09/10-state-pattern.html

  21) 전략 Strategy
    비슷하지만 다른 결과나 동작을 보이는 내용을 묶어서
      요청하는 쪽의 상태나 속성에 따라 다른 인스턴스를
      생성하여 다른 행동을 진행하도록 묶어주는 패턴
http://magmajjame.blogspot.kr/2015/05/1-strategy-pattern.html

  22) 템플릿 메서드 Template Method
    연산에 대한 뼈대를 상위에서 정의하고 구체적인 행동은
      서브 클래스에 미루는 패턴 이는 각 서브클래스에서 재정의하여
      목적에 맞는 행동을 각각 구현하는 방법
http://magmajjame.blogspot.kr/2015/09/8-template-method-pattern.html

  23) 방문자 Visitor
    객체 구조를 이루는 원소에 대해 수행할 연산을 표현하는 패턴
http://magmajjame.blogspot.kr/2015/10/18-visitor-pattern.html

댓글 없음:

댓글 쓰기