개방 폐쇄 원칙

클래스와 모듈은 확장에 열려 있어야 하고, 변경에는 닫혀 있어야 한다.

높은 응집도와 낮은 결합도

전략 패턴

자신의 기능 맥락 (context)에서 필요에 따라 변하는 알고리즘을 인터페이스를 통해 외부로 분리하고 필요에 따라 사용할 수 있도록 하는 것