TDD는 구현보다는 인터페이스에 집중할 수 있게 해준다. 즉, 테스트 코드를 먼저 작성하는 것은 목표를 시각화하는 작업이다. 기대하는 입출력 또는 메서드의 시그니처 등을 미리 고민하게 되는데 이는 모듈 개발자나 사용자에게 모두 도움이 된다.
테스트 코드를 작성하면서 요구사항에 해당하는 객체들의 관계나 기능에 대해 생각하고, 이는 작은 설계를 구현하면서 기능에 대한 추상화와 모듈화 사고를 유도할 수 있게 해준다.
대상 객체는 어떤 책임이 있으며 이를 실행하기 위해 어떤 부분들을 노출해야 되는지를 고민하는 과정에서 자연스럽게 객체 지향적인 설계 능력을 향상시킬 수 있다.
TDD를 수행하다 보면 '어떻게'보다는 '무엇'에 집중하게 된다.
객체가 어떻게 만들어졌는지 책임을 어떤 방식으로 수행하는지 보다는, 객체가 무슨 역할을 가져야 하는지 그리고 이러한 역할을 위해 무엇을 노출해야하는지 등에 집중할 수 있다.
기억해야 할 것들
- 사용자의 입장에서 인터페이스를 먼저 설계한다.
- TDD를 작성할 때 기대하는 입출력 또는 메서드의 시그니처 등을 미리 고민하며 목표를 시각화한다.
- setter는 쓰지 말도록 한다.
자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다. 객체의 외부에서 setter로 접근하게 되면 객체의 일관성, 안전성을 보장하기 힘들어진다.