더북(TheBook)

즉시 행동으로 옮긴 것이 핵심이다. 겹치는 부분이 있는 두 가지 사항을 반복해서 구현하는 대신 즉시 포괄적 솔루션을 만들었다. 그리고 또 한 가지, 필요 이상의 영역까지 포괄하는 솔루션을 만들지 않았다는 사실에도 주목하라. 내가 만든 솔루션은 오로지 WAV와 MP3만 지원한다. 그 외 다른 형식에 대한 고려는 일절 없다.

‘둘은 너무 많다’ 규칙은 다음 내용에도 적용된다.

 

원칙적으로는 개발자가 코드 일부를 수정한 후에 코드의 다른 부분까지 그와 비슷하거나 똑같은 방식으로 작동하도록 수정할 필요가 없어야 한다.

 

이는 개발자가 클래스 B를 업데이트할 때 클래스 A도 업데이트해야 한다고 ‘기억’할 필요가 없어야 한다는 말이다. 상수 X가 변할 때 파일 Y를 업데이트해야 한다고 생각할 필요도 없어야 한다. 다시 말해 구현체를 두 가지로 나누는 것뿐 아니라 신경 쓸 위치가 둘로 분산되는 것도 좋지 않다. 시스템을 항상 올바르게 구현할 수는 없겠지만 가능한 한 그렇게 되도록 노력해야 한다.

하지만 결국 무언가를 위해 위치를 둘로 나눌 수밖에 없는 상황이라면 둘이 ‘일치’하지 않을 때 시스템이 실패했다는 걸 시각적 혹은 청각적으로 확실히 보여주어야 한다. 컴파일은 물론, 항상 실행되어야 할 테스트 등도 모두 실패해야 한다. 둘이 일치하지 않는 일은 없어야 한다.

그리고 뻔한 얘기지만 ‘둘은 너무 많다’ 규칙 중 가장 쉬운 부분은 고전적인 원칙인 ‘반복하지 마라’라는 것이다. 똑같은 걸 나타내는 상수가 두 개여서는 안 된다. 똑같은 작업을 수행하는 함수가 둘이어서도 안 된다.

이 규칙을 적용할 방법은 이외에도 많을 것이다. 핵심은 하나의 개념을 두 가지로 구현하고 싶을 때 둘을 어떻게든 하나의 구현체로 만들어야 한다는 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.