뭐 예전엔 그렇게 얘기되던 때도 있었습니다. TDD를 통해 디자인을 한다고 Test-Driven Design이란 말도 돌았어요. 그런데 2016년에 엉클밥이 뭐라고 했는지 보죠.
Something that is hard to test is badly designed.
https://blog.cleancoder.com/uncle-bob/2016/03/19/GivingUpOnTDD.html
몇 년 전 켄트 벡도 DHH와의 공개 토론에서 유사한 얘기를 했습니다. 마틴 파울러는 옆에서 거들었던 것으로 기억합니다.
사실 영향력 있는 누군가의 말보다 중요한 건 현장에서 실제로 벌어지는 일들입니다. 저는 수년간 응집과 결합을 관리하지 못한 설계로 인해 TDD에 실패하는 사례를 많이 봐왔습니다. 간단히 정리하면,
인터페이스 설계는 TDD에 크게 영향을 줍니다. 이게 얼마나 당연한지 위 글에서 엉클밥이 설명합니다. TDD는 인터페이스 설계가 나쁘다는 신호는 주지만 좋은 설계로 안내하지는 않습니다.
TDD is not a good design methodology.
https://blog.ploeh.dk/2010/12/22/TheTDDApostate/
구현 설계는 TDD에 영향을 주지 않습니다. 반대로 TDD를 통해 크게 개선할 수 있습니다.