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

요약

  • 디자인 패턴 소개와 전략 패턴 (계속)
    • 동적으로 행동 지정하기
    • 캡슐화된 행동 살펴보기
    • 두 클래스를 합치는 방법
  • 첫 번째 디자인 패턴: 전략 패턴
    • 디자인 패턴 만나기
    • 패턴과 전문 용어
    • 디자인 패턴 사용법
    • 디자인 도구상자 안에 들어가야 할 도구들

메모

동적으로 행동 지정하기

  • Duck 서브클래스에서 세터 메서드를 호출하도록 설정한다.

캡슐화된 행동 살펴보기

  • Duck의 행동 집합 클래스로 분리하여 캡슐화함.

두 클래스를 합치는 방법

  • “A에는 B가 있다” 관계와 같이 두 클래스를 합치는 것을 구성(composition) 을 이용한다고 부름.
    • Duck 클래스의 경우, 행동을 상속받는 대신, 올바른 행동 객체로 구성되어 행동을 부여받음.
    • 구성 은 매우 중요한 테크닉이자, 세 번째 디자인 원칙임.
📍 세 번째 디자인 원칙 : 상속보다는 구성을 활용한다.
  • 구성을 활용해서 시스템을 만들면 유연성을 크게 향상시킬 수 있음.
    • Duck의 예시에서 봤던것과 같이 알고리즘군을 별도의 클래스 집합으로 캡슈로하할 수 있음.
      • 구성 요소로 사용하는 개체에서 올바른 행동 인터페이스를 구현하기만 하면 실행 시에 행동을 바꿀 수도 있음.

첫 번째 디자인 패턴: 전략 패턴

  • 지금까지가 첫번째 디자인 패턴을 적용한 것임.
    • 바로 전략 패턴.
    • SimUDuck 애플리케이션으로 분리할때 전략 패턴을 활용함.
📍 전략 패턴(Strategy Pattern) : 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해줌. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있음.

디자인 패턴 만나기

  • 디자인 패턴은 개발자 사이에 서로 모두 이해할 수 있는 용어를 제공함.
    • 이 용어를 통해 개발자와 더 쉽게 대화할 수 있음.
      • 패턴으로 소통하면 일상어로 구구절절 말할 때보다 훨씬 효율적인 의사소통이 가능함.
    • 객체 수준의 생각이 아닌, 패턴 수준에서 생각할 수 있기에 아키텍처를 생각하는 수준을 끌어 올릴 수 있음.

패턴과 전문 용어

  • 서로 알고 있는 패턴은 정말 막강함.
  • 패턴을 사용하면 간단한 단어로 많은 얘기를 할 수 있음.
  • 패턴 수준에서 이야기하면 ‘디자인’에 더 오랫동안 집중할 수 있음.
  • 전문 용어를 사용하면 개발팀의 능력을 극대화할 수 있음.
  • 전문 용어는 신입 개발자에게 훌륭한 자극체가 됨.

디자인 패턴 사용법

  • 라이브러리, 프레임워크만으로는 관리하기 쉽고 유연한 방법의 애플리케이션 구조를 만드는데 도움을 주지 못함.
    • 디자인 패턴으로 이 문제를 해결할 수 있음.
  • 디자인 패턴은 코드로 바로 들어가는게 아니라 머릿속으로 먼저 들어감.
    • 패턴을 완전히 익혀두면 어떤 코드가 유연성 없는지 금방 깨달을 수 있고, 그 코드를 수정할 때, 패턴을 적용해서 코드를 개선할 수 있음.
  • 객체지향의 기본만 알면 유연하고 재사용이 용이하고, 관리하기 쉬운 시스템을 쉽게 만들 수 있다고 생각하는데..
    • 그렇지 않음. 이러한 장점을 가진 객체 지향 시스템을 구축하는 일은 간단하지 않음. 상당한 노력이 필요.
    • 이러한 객체지향 시스템 구축 방법을 모아서 디자인 패턴을 만든것임.
  • 패턴을 찾을 수 없다면?
    • 패턴의 밑바탕에있는 객체지향 패턴을 생각해본다.
    • ex) 추상화, 캡슐화 …
    • 관리가 용이한 객제지향 시스템을 만드는 비결 → “나중에 어떻게 바뀔 것인지” 생각해본다.
      • 지금까지 배운 원칙은 이러한 내용이 담겨있음.

디자인 도구상자 안에 들어가야 할 도구들

  • 객체지향 기초
    • 추상화
    • 캡슐화
    • 다형성
    • 상속
  • 객체지향 원칙
    • 바뀌는 부분은 캡슐화한다.
    • 상속보다는 구성을 활용한다.
    • 구현보다는 인터페이스에 맞춰서 프로그래밍한다.
  • 객체지향 패턴
    • 전략 패턴
      • 알고리즘군을 정의하고 캡슐화한다.
      • 각각의 알고리즘 군을 수정해서 쓸 수 있게 해줌.
      • 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있음.

댓글

Designed by JB FACTORY