본문 바로가기

디자인 패턴

스트래티지 패턴(Strategy Pattern)

인터페이스

  • Interface를 이용하면 기능에 대한 선언과 구현이 분리 가능하다.

  • Interface를 통해 기능의 사용 통로가 될 수 있다.

델리게이트

  • 특정 객체에 기능을 사용하기 위해 다른 객체의 기능을 호출하는 것이다.


스트레티지 패턴(전략 패턴)

  • 특정한 알고리즘을 정의하고 각 알고리즘을 캡슐화하여 실행중에 알고리즘을 선택할 수 있는 디자인 패턴이다.
  • 이 패턴을 활용하면 클라이언트와는 독립적으로 다양한 알고리즘을 정의, 추가 할 수 있다.

  • 위의 다이어그램에 맞게 구현을 해볼 것이다.
  • Clinet는 GameCharacter 이 된다.
  • Strategy Interface는 Weapon이 된다.
  • Stratecy Clasee 들은 Knife, Sword, Ax들이 될 것이다.

  • Weapon이라는 인터페이스를 구현하고 구체적인 행동을 구현하는 Sword, Ax, Knife 클래스를 만든다.
  • 다형성을 통해 Weapon하나로 Sword, Ax, Knife모두를 가질수 있게 되었다.
  • 즉 Weapon 하나로 모든 무기를 설정할 수 있게 된 것이다.
  • GameCharacter는 멤버 변수로 Weapon을 가지고 있다.
  • GameCharacter는 새로운 무기가 추가되어도 Weapon만 상속받는 다면 구현을 변경할 필요가 없다.

  • 실행 중에 무기를 바꾸고 그냥 Weapon을 상속받은 인스턴스를 set해주면 된다.