1. if-else의 문제점
변경, 확장이 될 수록 코드가 복잡해진다
코드를 수정하거나 수정할 위치를 찾는데 점점 오래 걸린다.
실수로 추가하지 않고 누락하는 부분이 생길 가능성이 있다.
-> 유지보수가 어려워 진다!!
계속되는 기능 추가 -> 복잡도 증가 -> 추가, 수정이 힘들다.
2. OCP (open close principle, 개방폐쇄의 원칙)
소프트웨어 구성 요소(컴포넌트, 클래스, 모듈, 함수)는 확장에 대해서는 개방돼야하지만 변경에 대해 폐쇄 되어야한다.
기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다는 뜻이다.
적용방법
- 1 상속(is-a)
깨지기 쉬운 상위 클래스 문제 : 상속은 하위클래스가 상위클래스의 기능과 밀접하기 때문에 상위가 바뀌면 하위에 영향이 매우 크다.
- 2 컴포지션(has-a)
(1) 변경(확장) 될 것과 변하지 않을것을 엄격히 구분
(2) 이 두모듈이 만나는 지점에 인터페이스를 정의
(3) 구현에 의존하기보다 정의한 인터페이스에 의존하도록 코드를 작성 (DI, 의존성주입)
3. 전략 패턴
기존의 코드 변경없이 행위를 자유롭게 바꿀수 있게 해주는 OCP를 준수하기 위한 패턴
전략이란?
전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식
비즈니스 규칙, 문제를 해결하는 알고리즘
- 디자인 패턴의 꽃
- 전략을 쉽게 바꿀수 있도록 해주는 디자인 패턴
- 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
- 새로운 기능의 추가가가 기존의 코드에 영향을 미치치 못하게 하므로 OCP를 만족
Conext
스트래티지 패턴 이용하는 역할을 수행
필요에 따라 동적으로 구체적인 전략을 바꿀수 있도록 한다
Strategy
인터페이스나 추상클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시한다
ConcreateStrategy
전략패턴에서 명시한 알고리즘을 실제로 구현할 클래스
템플릿 메소드 패턴(상속) vs 전략 패턴(컴포지션)
참고자료 : 발포 영상을 정리 해 보았습니다.
www.youtube.com/watch?v=90ZDvHl8ROE&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=93