더북(TheBook)

개방/폐쇄 원칙

“모든 소프트웨어 개체는 확장 가능성은 열어 두되 수정 가능성은 닫아야 한다 ”는 원칙이다.

즉, 어떤 경우라도 실행 코드를 변경하지 말고, 어떻게든(상속 등의 방법으로) 재사용하고 확장하라는 뜻이다.

역시 만만찮은 요건이다. 로버트 마틴조차도 앞서 인용한 글에서 이런 말을 남겼다. “일반적으로 어떤 모듈이 꽉 ‘닫혀있다’ 하더라도 닫혀있지 않은 어딘가에서 어떤 식으로든 변경될 가능성은 있습니다. 완벽한 닫힘은 있을 수 없으니 모종의 전략이 필요합니다. 다시 말해 설계자는 불가피한 변경 유형을 미리 선택할 수밖에 없습니다. 오랜 경험에서 비롯된 통찰력이 필요한 부분입니다. ”

d3.svg.line 함수를 설계할 때 마이크 보스톡은 데이터에서 좌푯값을 뽑아내는 방법과 점을 연결하는(보간하는) 방법에 변경 사항이 있으리라 내다보고 이러한 특성을 추상화하여 함수 밖으로 빼내는 기지를 발휘했다.

그가 변경되지 않을 거라고(적어도 이전 버전과 호환되지 않는 식으로는 바뀌지 않을 거라) 본 건 SVG 경로의 규격이다. 반드시 “M ”으로 시작해서 그 뒤에 점 데이터가 이어지는 문자열 형태로 과감히 경로 문자열을 하드 코딩한 것이다.

SVG 명세서가 하루아침에 바뀔 일은 없을 테니 d3.svg.line역시 손댈 일은 거의 없을 것이다.

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