자, 간단한 원칙 다섯가지다.

  1. SRP - 어떤 클래스를 변경해야하는 이유는 오직 하나뿐 이어야 한다.
  2. OCP - 클래스를 변경하지 않고도 그 클래스의 환경을 바꿀 수 있어야 한다.
  3. LSP - 유도된 클래스의 메서드를 퇴화시키거나 불법으로 만드는 일을 피하라. 기반 클래스의 사용자는 그 기반 클래스에서 유도된 클래스에 대해 아무것도 알 필요가 없어야 한다.
  4. DIP - 자주 변경되는 구체 클래스 대신 인터페이스나 추상 클래스에 의존하라.
  5. ISP - 어떤 객체의 사용자에게 그 사용자한테 필요한 메서드만 있는 인터페이스를 제공하라.

언제 이 원칙들을 적용해야 할까? 조금이라도 고통을 느끼기 시작하면 바로 해야한다.

단위 테스트를 작성해보는 것은 시스템의 문제지점, 아픈 점을 찾는 좋은 방법 중 하나다.