예상했던 일이지만 정적 기록자(static logger) 변수를 그만 사용하자는 의견에 반발이 거세다. 모든 의견에 하나하나 대응해 줄 여유가 없음이 안타깝다. 그 중 다음 한가지 의견에 대해 답해 본다.

우리 응용프로그램은 수백 개의 클래스로 구성된다. 정적 기록자를 사용하지 않기 위해 모든 클래스에 DI(dependency injection) 설정을 하는 것은 비현실적이다.

 

어떤 기법에 대해 비현실적이라 말하는 것은 정말 비현실적이거나 충분히 현실적이지만 특정 개인이나 조직이 비현실적으로 느끼는 경우로 구분된다. 후자의 예로 나는 TDD(test-driven development)는 비현실적이라는 주장을 많이 접했다. 사실은 시도해 보지도 않고 지레 겁먹었거나 TDD를 충분히 이해하지 못하기 때문이었다.

백 개의 클래스가 있고 모두 기록자를 직접 사용한다는 가장 끔찍한 악몽같은 경우를 가정하자. 기록자 DI 설정을 위해 클래스당 두 줄의 코드를 추가하면 200줄을 작성해야 한다. 비현실적으로 많은가? 그럼 이건 어떤가? 백 개의 클래스가 모두 SRP(single responsibility principle)를 충실히 따랐다고 하더라도 테스트 케이스가 천 개 정도는 될 것이다. 그러면 테스트 코드는 모두 몇 줄일까? 백 개의 클래스를 위한 천 개의 테스트 케이스를 작성하는 것도 비현실적인가? 누군가에게는 일상적이고 또 다른 이에게는 비현실적이다.

동일한 기능을 전제로 코드가 없는 것은 그 어떤 코드보다 더 좋다. 하지만 적은 코드가 더 많은 코드보다 항상 더 좋은 것은 아니다. 게다가 사용성(usability)과 적응성(adaptability), 테스트 용이성(testability)은 기능(feature)이다. 코드 몇 줄로 유용한 기능을 확보할 수 있다면 결코 비현실적이지 않다. 긴 코드보다 나쁜 설계를 두려워하라.