본문 바로가기
공부계획

스트래티지 패턴?

by KyeongOUK 2020. 5. 13.

스트래티지 패턴.

상속을 한 클래스에서 변경이 될수있는 특정매서드를 클래스 하나로 묶어서 그걸 운용하는 패턴

오리는 헤엄친다

청둥오리 집오리 는 헤엄치는게 가능.

하지만 로봇오리는 헤엄치지 못한다.

여기서 헤엄치는걸 헤엄치다와 헤엄치지 못하다로 나뉘고 헤엄이라는 클래스를 만들어 그 안에 [헤엄치다][헤엄치지못하다]라는 메서드를 만든다.

나중에 헤엄에 또다른 기능이 추가되면 바꿀수가 있다. 부모메서드와는 다른 개념으로 이해해야한다.

 

 

스트래티지 패턴이란

  • 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
    • 같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화되어 있고 이들이 필요할 때 교체할 수 있도록 함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 디자인 패턴
    • ‘행위(Behavioral) 패턴’의 하나 (아래 참고)
  • 즉, 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다.
    • 전략이란
      • 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등
  • 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동하는 방식을 바꾸고 싶을 때 스트래티지 패턴은 매우 유용하다.
  • 역할이 수행하는 작업
    • Strategy
      • 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시
    • ConcreteStrategy
      • 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스
    • Context
      • 스트래티지 패턴을 이용하는 역할을 수행한다.
      • 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 setter 메서드(‘집약 관계’)를 제공한다.

참고

  • 행위(Behavioral) 패턴
    • 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
    • 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화하는 것에 중점을 둔다.
  • 집약 관계
    • 참조값을 인자로 받아 필드를 세팅하는 경우
    • 전체 객체의 라이프타임과 부분 객체의 라이프 타임은 독립적이다.
    • 즉, 전체 객체가 메모리에서 사라진다 해도 부분 객체는 사라지지 않는다.

예시

로봇 만들기

 

출처 : https://gmlwjd9405.github.io/2018/07/06/strategy-pattern.html

댓글