전략 패턴

고장난 고양이·2022년 7월 8일
0

개발지식

목록 보기
6/25
post-thumbnail

전략 패턴이란?

전략 패턴(strategy pattern)이란 정책패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 '직접'수정하지않고 전략이라고 부루는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴입니다.

전략 패턴의 구성 요소

전략 패턴의 구조

  • 전략(strategy) : 구체화된 여러 알고리즘들의 추상화로써, 변하는 부분을 담당

  • 전략 콘크리트(concrete strategy) : 여러 알고리즘의 실제 구현

  • 전략 사용자(context) : 전략을 사용하는 프로그램의 흐름으로, 변하지 않는 것

  • 전략 제공자(client) : 전략 사용자에게 실제 전략으로 사용할 전략 콘크리트 클래스를 주입하는 역할

보다시피 상황에 따라 다양한 알고리즘을 필요로 하는 경우 전략 패턴을 사용할 수 있어요.

그러면 이런 발상을 코드로 옮기기 위해서는 어떻게 전략과 전략 콘크리트를 작성하는 게 좋을까요?

바로 인터페이스와 해당 인터페이스를 구현한 클래스를 사용하는 것이에요!

인터페이스를 통해 전략을 추상화 시켜놓은 후, 적재 적소에 필요한 전략을 구현한 Class를 삽입하는 것이죠.

전략 패턴의 장단점

(장점)

  • 전략 사용자(context)의 코드 변경 없이 새로운 전략을 추가 할 수 있다.

    • 이를 통해 if - else 분기를 제거할 수 있다.

    • if - else 분기를 제거하면, 단일 책임 원칙을 준수하기 더 수월해진다.

  • 확장에 유리한 코드를 작성할 수 있다.

    • 새롭게 필요한 전략 콘크리트 클래스를 쉽게 만들 수 있다.

    • 개방 폐쇄 원칙을 준수한 코드 작성이 가능하다.

  • 런타임에 전략을 변경시킬 수 있다.

(단점)

  • 어플리케이션에 들어가는 모든 전략을 알고 있어야 한다.

    • 클래스로 분리한 각 전략들이 어느 상황에 사용되어야 할 지 알고 있어야 한다.

    • 이 같은 특성이 어쩌면 유지보수를 더 힘들게 할 수도 있다.

  • 전략을 추상화한 인터페이스가 효율적이지 못할 수 있다.

    • 어떤 전략 콘크리트 객체에서는 사용하지 않는 메서드들 역시 전략 인터페이스에 정의해 주어야 한다.

참고
링크텍스트
링크텍스트
링크텍스트

profile
개발새발X발일지

0개의 댓글