본문 바로가기

Java/DesignPattern

[헤드퍼스트] 1장 전략패턴

  • 클래스에 메서드를 추가할 상황일때(유연하지 않게 만든다면)
    • 서브클래스에 상속을 이용해 구현(어떤 클래스는 추가된 메서드를 사용 안 할 수 있음
    • 인터페이스를 사용해 구현(인터페이스를 구현해서 만든 코드를 재사용할 수 없음)
  • 디자인원칙
    • 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다.
      • 바뀌는 부분은 따로 뽑아서 캡슐화한다. 그러면 나중에 바뀌지 않는 부분에는 영향을 미치지 않고 그 부분만 고치고나 확장할 수 있다.
    • 구현보다는 인터페이스에 맞춰서 프로그래밍한다.
      • 서브클래스에서 자체적 구현 X
      • 클래스에서 구체적 구현 X
      • 인터페이스를 구현한 별도의 클래스를 사용 > 클래스는 인터페이스를 사용하면 구체적으로 구현할 필요가 없어진다.
      • 인터페이스에 맞춰서 프로그래밍한다는 말은 상위 형식에 맞춰서 프로그래밍한다는 말이다.
Dog d = new Dog();
d.bark

//구체적인 구현에 맞춰서 코딩

Animal animal = new Dog();
animal.makeSound();

//다형성을 활용해 Amimal의 레퍼런스 활용

a = getAmimal();
a.makeSound();

//Animal의 하위 형식 가운데 어떤형식인지 모른다. 단지 makeSound의 올바른 반응만 할 수있으면 OK

--행동을 클래스(또는 그 서브클래스)에서 정의한 메소드를 써서 구현하지않고 다른 클래스에 위임한다는게 포인트

  • 상속보다는 구성을 활용한다.
    • 두 클래스를 합치는 것을 구성을 이용한다라고 부른다.
    • 여기에 나와있는 오리클래스는 행동을 상속받는대신 올바른 행동 객체로 구성되어 행동을 부여받는다.
  • 전략패턴
    • 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해 줍니다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있습니다.
  • 패턴으로 소통하면 일상어로 구구절절 말할 때보다 훨씬 효율적으로 의사소통이 가능하다.

 

  • 디자인 도구상자 도구들
    • 객체지향 기초
      • 추상화
      • 캡슐화
      • 다형성
      • 상속
    • 객체지향 원칙
      • 바뀌는 부분은 캡슐화한다.
      • 상속보다는 구성을 활용한다.
      • 구현보다는 인터페이스에 맞춰서 프로그래밍한다.
    • 객체지향패턴
      • 패턴은 발명되는 것이 아니라 발견되는 것
      • 시스템의 빌부분을 나머지 부분과 무관하게 변경하는 방법을 제공
      • 많은 경우에 시스템에서 바뀌는 부분을 골라내서 캡슐화해야한다.
      • 다른 개발자와의 의사소통을 극대화하는 전문 용어 역할 수행

'Java > DesignPattern' 카테고리의 다른 글

[HeadFirst] 5장 싱글턴 패턴  (0) 2022.08.24
[HeadFirst] 4장 팩토리 패턴  (0) 2022.08.16
[HeadFirst] 3장 데코레이션 패턴  (0) 2022.08.13
[헤드퍼스트] 2장 옵저버 패턴  (0) 2022.08.07