본문 바로가기

Java

디자인패턴8-전략 패턴/스트래티지 패턴(Strategy Pattern)

제목만 보면?

전략 패턴? 뭔가 전략이 자주 바뀌는 즉, 특정 행위가 바뀌는 상황에서 쓰면 좋은 패턴인 것 같다.

 

일을 하는 방식, 비즈니스 규칙, 문제를 해결하려는 알고리즘을 쉽게 바꿔주기 위한 규칙인 것 같다

 

요구 사항

여러가지 로봇이 있는데 각자 공격 방식과 이동 방식이 다르다. 이를 모델링 해달라!

 

기존의 나였다면?

나름 부모 클래스를 만들어서 move(), attack() 함수를 정의하고

구체적인 구현은 자식 클래스에게 맡겼을 것이다.

나의 개발 완벽하니?

  • Atom과 TaekwonV는 move() 방식이 같은데 코드가 중복! ( 나중에 걷는 방식이 구체화되고 수정해야 된다면 2번 수정! )
  • 새로운 로봇을 구현하는데 move()나 attack() 방식이 같은 경우도 중복 발생!
  • Atom을 걷는 방식에서 나는 방식으로 바꾼다면? 기존의 Atom - move()를 수정해야 되기 때문에 OCP 원칙에 위배된다.

구체적인 방식을 은닉화 시키자! - 전략패턴

  • Robot 클래스는 구체적인 공격, 이동을 알고 있지 않다. ( MissingStrategy, AttackStrategy )
    => 해당 인터페이스를 통해 Robot의 변화는 막아 준다. 즉, 외부에서 방식을 주입하는 식이기 때문에 Robot의 변화는 일어나지 않는다.

 

참고 : https://gmlwjd9405.github.io/2018/07/06/strategy-pattern.html