디자인 패턴: Strategy 패턴, State 패턴

yshjft·2022년 1월 15일
0

Java, OOP

목록 보기
15/27

Strategy 패턴

strategy 패턴이란?

✔︎ 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
✔︎ 특정 컨텍스트에서 알고리즘을 별도로 분리하는 설계 방법을 의미
✔︎ 전략(비즈니스 로직 or 알고리즘)을 쉽게 바꿀 수 있도록 해주는 디자인 패턴
✔︎ 작업을 여러 객체로 어떻게 분배하면서 객체 사이의 결합도를 최소화 시키는 것에 초점

장점

  • 컨텍스트 코드의 변경 없이 새로운 전략을 추가할 수 있다(OCP 준수)
  • 런타임에 전략을 바꿀 수 있다.
  • 전략을 사용하는 코드와 전략을 구현하는 세부 기능을 분리할 수 있다.

단점

  • 전략의 종류가 적고 전략이 잘 변하지 않는 경우 코드를 더 복잡하게 만든다.

SOLID 관점

  • OCP 준수

예제 코드

Strategy Pattern 예제 코드

참고

State 패턴

state 패턴이란?

✔︎ 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴
✔︎ 객체의 상태를 클래스로 선언 & 클래스에서는 해당 상태에서 할 수 있는 행위들을 메서드로 정의 & 각 상태 클래스들을 인터페이스로 캡슐화

코드

State Pattern 예제 코드

Strategy와 굉장히 유사

State 패턴은 인터페이스를 사용하여 클래스들을 캡슐화한다는 점과 Context 클래스는 이러한 인터페이스를 사용한다는 점과 Strategy 패턴과 굉장히 유사하다. 하지만 Strategy 패턴은 Context 클래스에서 특정 객체를 지정해주는 반면 State 패턴은 외부의 개입 없이 객체 내부에서 현재 상태에 따라 Context 객체의 멤버 상태 객체를 변경하여 사용한다.

+(내용 추가)
strategy: 구성을 이용하여 상속을 대체
state: 구성을 이용하여 코드내의 조건문들을 대체

SOLID 관점

SOLID 관점에서 본 상태 패턴

참고

profile
꾸준히 나아가자 🐢

0개의 댓글