전략패턴은 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변결할 수 있다.
영어 공부, 수학 공부를 하는 클래스가 있다. 평소에 Client에서는 영어 공부만 했다. 그런데 수학 공부로 변경하고 싶다. 전략 패턴을 쓰기 전에 코드는 밑에 와 같다.
이렇게 변경이 생길 때 코드 전체를 다 변경해야 한다. 이렇게 변경할 때마다 코드 전체를 변경해야 한다면 프로젝트가 커지면 커질수록 더 힘들 것이다. 이번에는 전략패턴을 사용해보자.
영어 클래스와 수학 클래스에 공통 메서드인 doing을 study라는 인터페이스로 추상화를 한다. 그리고 study 인터페이스를 기존에 클래스가 구현하도록 설계를 한다.
처음 인터페이스를 공부할 때는 굳이라는 생각이 많이 들었다. 굳이 인터페이스를 구현하게 설계를 하면 인터페이스를 하나 만들어야 하고 그거를 각 클래스가 구현하게 추가를 해줘야 한다. 디자인 패턴을 공부하다 보니 생각이 달라졌다. 밑에 코드를 보면 이해 할 것이다.
추상화된 부분은 변경이 안되고 구현 부분만 변경이 되는것을 알 수 있다. 위에 코드에 비해 변경이 줄어들었다. 하지만 오른쪽 구현 부분은 english에서 math로 변경해 줘야 한다. 구현 부분까지 변경을 안 하는 것을 도와주는 게 spring framework다. 스프링은 의존성 주입(DI)를 통해 개방-폐쇄 원칙(OCP)를 지키도록 도와주고 있었다.
'디자인 패턴' 카테고리의 다른 글
빌더 패턴(builder Pattern) (0) | 2022.07.30 |
---|---|
추상 팩토리 패턴( Abstract Factory Pattern) (0) | 2022.07.24 |
팩토리 패턴 (1) | 2022.07.17 |
데코레이터 패턴 (2) | 2022.06.26 |
옵저버 패턴(Observer Pattern) (0) | 2022.06.20 |