책너두 (헤드 퍼스트 디자인 패턴) 46일차 (~621p)

요약

  • 실전 디자인 패턴
    • 디자인 패턴 분류하기
    • 디자인 패턴 범주 알아보기
    • 패턴으로 생각하기
      • 최대한 단순하게
      • 디자인 패턴은 만병통치약이 아님
      • 패턴이 필요할 때
      • 리팩터링과 패턴
      • 꼭 필요하지 않은 패턴은 빼버리자. 지금의 디자인에서 디자인 패턴을 제거하는 일을 두려워하지 말자.
      • 꼭 필요하지 않은 패턴을 미리 적용할 필요가 없음.
    • 패턴을 대하는 마음가짐
    • 전문 용어의 위력 되새기기
      • 용어를 공유하는 5가지 방법
    • 4인방과 함께하는 객체마을 여행

메모

디자인 패턴 분류하기

  • 같은 그룹에 속하는 패턴끼리 비교하기 좋게 종류에 따라 분류할 필요성이 생김.
    • 생성, 행동, 구조라는 3가지 범주로 용도에 따라 나눔.

디자인 패턴 범주 알아보기

  • 생성 패턴(Creational Pattern) : 객체 인스턴스를 생성하는 패턴으로, 클라이언트와 그 클라이언트가 생성해야 하는 객체 인스턴스 사이의 연결을 끊어 주는 패턴임.
    • 싱글턴
    • 빌더
    • 프로토 타입
    • 추상 팩토리
    • 팩토리 메소드
  • 행동 패턴(Behavioral Pattern) : 클래스와 객체들이 상호작용하는 방법과 역할을 분담하는 방법을 다루는 패턴임.
    • 템플릿 메소드
    • 비지터
    • 중재자
    • 인터프리터
    • 싱글턴
    • 반복자
    • 역할 변경
    • 옵저버
    • 메멘토
    • 상태
    • 전략
  • 구조 패턴(Structural Pattern) : 클래스와 객체를 더 큰 구조로 만들 수 있게 구성을 사용하는 패턴
    • 데코레이터
    • 컴포지트
    • 프록시
    • 퍼사드
    • 플라이웨이트
    • 브리지
    • 어댑터

  • 클래스를 다루는 패턴인지, 객체를 다루는 패턴인지에 따라 패턴을 분류하는 방법도 있음.
  • 클래스 패턴(Class Pattern) : 클래스 사이의 관계가 상속으로 어떻게 정의되는지를 다룸. 클래스 사이의 관계는 대부분 컴파일할 때 결정 됨.
    • 템플릿 메소드
    • 팩토리 메소드
    • 어댑터
    • 인터프리터
  • 객체 패턴(Object Patterns) : 객체 사이의 관계를 다룸. 객체 사이의 관계는 보통 구성으로 정의됨. 일반적으로 실행 중에 관계가 결정되므로 보다 동적이고 유연함.
    • 컴포지트
    • 데코레이터
    • 퍼사드
    • 커맨드
    • 비지터
    • 반복자
    • 프록시
    • 옵저버
    • 메멘토
    • 전략
    • 책임 연쇄
    • 브리지
    • 중재자
    • 상태
    • 플라이웨이트
    • 프로토타입
    • 추상 팩토리
    • 빌더
    • 싱글턴

패턴으로 생각하기

  • 아무리 복잡하고 까다로운 이론을 많이 알고 있다고 해도 경험과 연습 없이 별로 도움이 되지 않음.
  • 패턴으로 생각하는 데 있어 도움이 될만한 내용을 몇가지 정리함.

최대한 단순하게

  • 디자인을 할 때 무엇보다 중요한 원칙 → 최대한 단순한 방법(KISS, Keep it Simple) 으로 문제를 해결하기임.
    • 이 문제에 어떻게 패턴을 적용할 수 있을까? X
    • 어떻게 하면 단순하게 해결할 수 있을까? O

디자인 패턴은 만병통치약이 아님

  • 패턴을 사용할 때는 그 패턴이 우리가 설계한 디자인에 미칠 영향과 결과를 주의 깊게 생각해 봐야 함.

패턴이 필요할 때

  • 디자인을 할 때, 지금 디자인상의 문제에 적합하다는 확신이 든다면 패턴을 도입해야 함.
    • 언제 패턴을 적용할지 올바르게 결정하려면 상당한 경험과 지식이 축척되어야 함.
  • 간단한 해결책으로 문제가 해결되는 데도 시스템의 어떤 부분이 변경될 거라고 예측되는 상황에는 디자인 패턴을 적용해야 함.

리팩터링과 패턴

  • 리팩터링의 목적은 행동 변경이 아니라 구조 개선임.
    • 패턴을 사용해서 구조가 더 개선될 수 있다면 아주 좋은 기회임.

꼭 필요하지 않은 패턴은 빼버리자. 지금의 디자인에서 디자인 패턴을 제거하는 일을 두려워하지 말자.

  • 시스템이 점점 복잡해지면서 청므에 기대했던 유연성이 전혀 발휘되지 못한다면 패턴을 과감하게 제거해 버리는게 나음.
    • 패턴보다 간단한 해결책이 더 나을 것 같다 싶을 때 패턴을 제거하면 됨.

꼭 필요하지 않은 패턴을 미리 적용할 필요가 없음.

  • 꼭 필요하지 않은 데도 괜히 패턴을 추가하는 일을 피해야함.
    • 괜히 시스템만 복잡해지고, 나중에 그 패턴을 사용하지 않을 수도 있음.

패턴을 대하는 마음가짐

  • 초보자들은 언제나 패턴을 사용하려는 경향이 있음.
  • 경험이 늘어 중급자 수준에 오르면 어떤 상황에 패턴이 필요하고 필요하지 않는지를 파악할 수 있음.
  • 그랜드 마스터의 경지에 오르면 패턴을 자연스럽게 구사할 수 있음.

전문 용어의 위력 되새기기

  • 디자인 패턴이 의사소통에 크게 도움이 됨.
    • 개발자들 사이에서 의사소통을 하는 데 필요한 용어를 제공함.

용어를 공유하는 5가지 방법

  1. 디자인 회의에서 디자인 패턴을 사용하면 ‘디자인 자체’에 더 많은 시간을 할애할 수 있음.
  2. 다른 개발자들과 토론할 때 디자인 패턴을 사용하면 다른 개발자들이 새로운 패턴을 배우는 데 도움이 되고 커뮤니티를 구추갛는 데도 도움이 됨.
  3. 아키텍처 문서에 패턴을 활용하면 적은 분량으로 디자인을 분명하게 설명할 수 있음.
  4. 코드 주석을 달 때 어떤 패턴을 쓰는지 적어주자.
    • 클래스와 메소드 이름을 만들 때도 사용 중인 패턴이 분명히 드러날 수 있도록 하자.
  5. 개발자 모임에서 우리가 알고 있는 것을 다른사람들에게도 알려주자.

4인방과 함께하는 객체마을 여행

  • 에릭 감마, 리차드 헬름, 랠프 존슨, 존 블리시디즈 → 4인방 (Gang of Four) 또는 GoF라고 부름
    • 이 4명은 처음으로 패턴 카탈로그를 만들어서 소프트웨어 분야에 새로운 바람을 몰고 옴.

댓글

Designed by JB FACTORY