프로그래밍 요구사항에 대한 기능 구현 목록을 잘 작성한다.
기능 구현 목록 = 객체들이 가져야 할 책임들.
책임을 어울리는 객체들에게 나눠준다.
책임들에 대한 테스트 코드들을 꼼꼼하게 작성한다.
테스트들이 모두 통과하도록 프로덕션 코드를 구현한다.
프로그래밍 요구사항 == 기능 구현 목록 == 객체들이 가져야 할 책임들 -> 테스트 코드로 작성되어 있음.
리팩토링 시, 책임들이 객체간에 이동할 순 있어도, 바뀔 순 없다. 왜냐하면, 책임들은 프로그래밍 요구사항이기 때문이다.
모든 기능(책임)들을 인터페이스로 구현한다. -> 구현은 신경쓰지 않는다 == 구현 객체 내부의 수정과, 구현 객체 자체의 교체가 용이하도록 한다.
테스트 코드를 수정할 필요가 없다.