더북(TheBook)

단일 책임 원칙

다소 과장해서 말하면 모든 클래스(자바스크립트는 함수)는 반드시 한 가지 변경 사유가 있어야 한다.

정말 무리한 요건이다. 코드 한 줄 한 줄이 앞으로 변경될 무언가를 나타내는데, 그럼 함수를 모조리 코드 한 줄만으로 작성하라는 말인가?

음, 너무 빨리 포기하지는 말자. 예제 1-1 rj3.svg.line 함수는 어떤 형태의 데이터 소스라도 입력받아 SVG 라인 경로를 생성할 수 있다. 여기서 만약 데이터가 바뀌면? 이 함수는 단서가 될 만한 정보는 사실상 외부에서 다 받고 점 데이터에서 x, y 좌푯값을 추출하는 방법까지 넘겨받는다.

그건 그렇고 interpolate 함수는 D3 코드를 축약해서 손해 본 부분 중 하나다. 전체 D3 코드에서는 x, y 값의 추출 함수를 지정하듯 이 함수도 지정할 수 있게 되어 있다. 이 함수는 SVG 경로 의 점을 연결하는 일을 한다. 기본적으로는 여러 개의 점을 직선으로 연결하지만, 우아하게 휘어진 곡선도 만들 수 있게 보간자(interpolator)를 끼워 넣을 수 있다. D3도 몇 가지 보간자를 제공한다.

이렇듯 정작 rj3.svg.line은 ‘아는’ 게 거의 없다. 그저 점 데이터를 배열로 받아 SVG 경로를 그려주는 함수(내부 line)를 반환할 뿐이다.

rj3.svg.line을 변경할 일이 과연 있을까? 이 함수의 유일한 관심사는 배열에서 SVG 경로를 만드는 일이다. 이 관심사를 어떻게 이행할지는 철저하게 외부에서 제공한 함수에 달려 있으니 변경할 이유가 전혀 없다!

“마이크 보스톡 씨, 당신 정말 너무 쉽게 일을 하는데? ”

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