코드의 직교성의 장점

Posted by epicdev Archive : 2011. 10. 1. 12:59
생산성 향상

변화가 국소화되서 개발 시간과 테스트 시간이 줄어든다. 상대적으로 작고, 자족적인 컴포넌트를 작성하는 것이 하나의 커다란 코드 덩어리를 만드는 것보다 더 쉽다. 간단한 컴포넌트들은 설계하고, 코딩하고, 단위 테스트하고, 그러고는 잊어버릴 수 있다. 새로운 코드를 추가할 때마다 기존의 코드를 계속 바꾸어야 할 필요가 없다.

직교적인 접근법은 또한 재사용을 촉진한다. 컴포넌트들에 명확하고 잘 정의된 책임이 할당되어 있다면 애초의 구현자들이 미처 생각하지 못했던 방식으로 새로운 컴포넌트와 결합할 수 있다. 시스템이 더 느슨하게 결합되어 있을수록 재설정하고 리엔지니어링하기 쉽다.

직교적인 컴포넌트들을 결합하는 경우 꽤 미묘한 생산성 향상이 있다. 컴포넌트 하나가 M가지 서로 다른 일을 한다고 치고, 또 다른 컴포넌트 하나가 N가지 다른 일을 한다고 가정하자. 만약 그것들이 직교적이라면 결합했을 때 결과물은 M X N개 만큼  일을 한다. 그렇지만, 두 개의 컴포넌트가 직교적이지 못하면 겹치는 부분이 있을 테고, 결과물이 할 수 있는 일은 그 이하일 것이다. 직교적인 컴포넌트들을 결합함으로써 단위 노력당 더 많은 기능을 얻을 수 있다.

리스크 감소

감염된 코드는 격리된다. 어떤 모듈이 병에 걸렸다 해도 시스템의 나머지 부분으로 증상이 전파될 확률이 낮다. 게다가 그 부분만 도려내고 새롭고 건강한 놈으로 이식해 넣기도 쉽다.

시스템이 잘 깨어지지 않는다. 어떤 부분을 골라서 약간 바꾸고 수리해도 거기서 생기는 문제점들은 그 부분에만 한정될 것이다.

직교적인 시스템은 해당 컴포넌트들에 대해 테스트를 설계하고 실행하기 훨씬 쉽기 때문에, 아무래도 더 많은 테스트를 하게 된다.

써드파티 컴포넌트로 연결되는 인터페이스들이 전체 개발의 작은 부분에 한정되기 때문에 특정 벤더나 제품, 플랫폼에 덜 종속될 것이다. 


실용주의프로그래머
카테고리 컴퓨터/IT > 프로그래밍/언어
지은이 앤드류 헌트 (인사이트, 2007년)
상세보기