파이썬 디자인 패턴 2/e 책 정리

코드 : http://www.acornpub.co.kr/book/python-design-patterns-2e#author

1장 디자인 패턴 개요

1. 객체지향 디자인의 기본 원칙

  • 개방-폐쇄 원칙 (The open/Close Principle)
객체, 메소드 모두 확장엔 개방적이고 수정엔 폐쇄적이여야 한다.
즉, 기본 클래스는 건드리지 않고 클래스를 확장해 새로운 기능을 추가 구현할 수 있는 구조가 개방-폐쇄 원칙을 지키는 구조
    - 장점
기본 클래스를 수정하지 않기 때문에 실수가 줄어듬
기존 코드의 호환성을 보장
  • 제어 반전 원칙(The Inversion of Control Principle)
상위 모듈은 하위 모듈에 의존적이지 않아야 한다.
-> 세부 구현이 추상화에 의존해야 한다.
    - 장점
모듈 간의 낮은 상호 의존도는 시스템의 복잡도를 줄인다.
관련 모듈을 연결하는 추상화 계층 덕분에 모듈 간 상호 관계를 쉽게 관리할 수 있다.
  • 인터페이스 분리 원칙(The Interface Segregation Principle)
클라이언트는 불필요한 인터페이스에 의존하지 않아야 한다.
-> 반드시 해당 기능과 관련 있는 메소드만을 작성 
    - 장점
의도하지 않은 메소드로 인터페이스가 채워지지 않도록 한다.
  • 단일 책임 원칙(The Single Responsibility Principle)
클래스는 하나의 책임만을 가져야 한다.
->한 클래스는 한 가지 기능에만 중점을 둬야한다.
    - 장점
특정 기능을 수정할 때 관련 클래스 외에는 건드릴 필요가 없다.
  • 치환 원칙(The Substituion Principle)
상속받는 클래스는 기본 클래스의 역할을 완전히 치환할 수 있어야 한다.
-> 파생된 클래스는 기본 클래스를 완전히 확장해야 한다.

2. 디자인 패턴

디자인 패턴은 GoF(Gang of Four)가 문제 해결책으로 처음 제시한 개념
-> Gof : “GOF의 디자인 패턴”을 집필한 네 명의 저자를 지칭

  • 디자인 패턴의 장점
여러 프로젝트에서 재사용 가능
설계 문제를 해결
오랜 시간에 걸쳐 유효성이 입증됨
신뢰할 수 있는 솔루션
  • 디자인 패턴 용어

스니펫(Snippet) : DB에 연결하는 코드 등 특수한 목적을 위한 코드
디자인(Design) : 문제에 대한 해결책
스탠다드(Standard) : 문제를 해결하는 대표적인 방식
패턴(Pattern) : 유효성이 검증된 효울적이고 확장 가능한 해결책

3. 디자인 패턴 맥락

참가자 : 디자인 패턴에서 사용되는 클래스
비기능적 조건 : 메모리 최적화와 사용성, 성능
타협선 : 디자인 패턴이 모든 상황에 항상 딱 들어맞지 않으므로 적당한 타협선 필요

4. 디자인 패턴의 분류

  • 생성 패턴
객체가 생성되는 방식을 중시한다.
객체 생성 관련 상세 로직을 숨긴다.디자인
코드는 생성하려는 객체형과는 독립적이다.
ex) 싱글톤 패턴(The Singleton Pattern)
  • 구조 패턴
클래스와 객체를 더 큰 결과물로 합칠 수 있는 구조로 설계
구조를 간결화하고 클래스와 객체 간의 상호관계를 파악할 수 있다.
클래스 상속과 컴포지션을 중시한다
ex) 어댑터 패턴(The Adapter Pattern)
  • 행위 패턴
객체 간의 상호작용과 책임을 중시
객체는 상호작용하지만 느슨하게 결합돼야 한다.
ex) 옵저버 패턴(The Observer Pattern)