자, 간단한 원칙 다섯가지다.
- SRP - 어떤 클래스를 변경해야하는 이유는 오직 하나뿐 이어야 한다.
- OCP - 클래스를 변경하지 않고도 그 클래스의 환경을 바꿀 수 있어야 한다.
- LSP - 유도된 클래스의 메서드를 퇴화시키거나 불법으로 만드는 일을 피하라. 기반 클래스의 사용자는 그 기반 클래스에서 유도된 클래스에 대해 아무것도 알 필요가 없어야 한다.
- DIP - 자주 변경되는 구체 클래스 대신 인터페이스나 추상 클래스에 의존하라.
- ISP - 어떤 객체의 사용자에게 그 사용자한테 필요한 메서드만 있는 인터페이스를 제공하라.
언제 이 원칙들을 적용해야 할까? 조금이라도 고통을 느끼기 시작하면 바로 해야한다.
- 전체 시스템이 언제나 모든 원칙을 따르게끔 노력하는 것은 현명하지 못하다.
- 이 원칙들을 적용하는 가장 좋은 방법은 능동적으로 적극 적용하는 것이 아니라, 문제가 생겼을때 그에 대한 '반응으로써 적용'하는 것이다.
- 코드의 구조적인 문제를 처음 발견했거나, 어떤 모듈이 다른 모듈에서 생긴 변화에 영향을 받음을 처음 깨달았을때 그때 '비로소' 원칙 가운데 하나 또는 여러개를 써서 이 문제를 해결할 수 있는지 알아보아야 한다.
단위 테스트를 작성해보는 것은 시스템의 문제지점, 아픈 점을 찾는 좋은 방법 중 하나다.