You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
각 운송수단 객체를 생성한 후, 운송 수단이 어떻게 움직이는지 설정하기 위해 setMovableStrategy를 호출한다.
publicclassClient {
publicstaticvoidmain(Stringargs[]){
Movingtrain = newTrain();
Movingbus = newBus();
/* 기존의 기차와 버스의 이동 방식 1) 기차 - 선로 2) 버스 - 도로 */train.setMovableStrategy(newRailLoadStrategy());
bus.setMovableStrategy(newLoadStrategy());
train.move();
bus.move();
/* 선로를 따라 움직이는 버스가 개발 */bus.setMovableStrategy(newRailLoadStrategy());
bus.move();
}
}
장점
if -else 분기를 제거해서 context의 코드 변경 없이 전략을 추가할 수 있다.
확장에 유리한 코드를 작성할 수 있다.
OCP 원칙을 준수한 코드 작성이 가능하다.
단점
애플리케이션에 들어가는 모든 전략을 다 알고 있어야 한다.
클래스로 분리된 전략들이 어느 상황에 사용되는지 다 알아야 한다.
어찌보면 유지보수가 더 어려울지도..
전략을 추상화한 인터페이스가 효율적이지 못할 수 있다.
어떤 전략 콘크리트 객체에선 사용하지 않는 메소드들 역시 전략 인터페이스에 정의해 주어야 한다.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
✔전략 패턴
🎈개념
정책 패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 ‘직접’ 수정하지 않음
컨텍스트 안에서 ‘전략’이라 불리는 ‘컨텍스트 알고리즘’을 바꿔주면서 상호 교체가 가능하게
컨텍스트 알고리즘 ?
전략이라 불리며 전략 패턴에서 별도로 분리가 된다.
컨텍스트
문맥, 맥락을 의미하며 개발자가 어떤 작업을 완료하는데 필요한 모든 관련 정보
✨예시
예시 - 1️⃣
예시 - 2️⃣
하지만, 위와 같이 코드를 수정하면 SOLID 원칙 중 OCP에 위배된다.
따라서, 다시 전략 패턴에 따라 수정한다면 ?
다음은 운송 수단에 대한 클래스를 정의
운송 수단은 move() 메소드를 통해 움직일 수 있는데 직접 구현하지는 않고, 어떻게 움직일 것인가에 대한 전략을 설정하여 그 방식으로 움직이도록 한다.
따라서, setMovableStrategy()가 존재한다.
마지막으로 운송 수단을 사용하는 Client를 구현할 차례
각 운송수단 객체를 생성한 후, 운송 수단이 어떻게 움직이는지 설정하기 위해 setMovableStrategy를 호출한다.
장점
단점
참고 링크
[[Design Pattern] 스트래티지 패턴이란 - Heee's Development Blog](https://gmlwjd9405.github.io/2018/07/06/strategy-pattern.html)
[[디자인패턴] 전략 패턴 ( Strategy Pattern )](https://victorydntmd.tistory.com/292)
[저는 전략 패턴이 처음이라니까요?](https://joel-dev.site/75)
[DI (Dependency Injection)가 뭘까?](https://siyoon210.tistory.com/122)
✔옵저버 패턴
: 객체의 상태 변화를 관찰하는 관찰자들, 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 각 옵저버에게 통지하도록 하는 디자인 패턴
Beta Was this translation helpful? Give feedback.
All reactions