쓸모 있는 모듈러 디자인
최근에 제가 공부하고 있는 책에서 모듈이 가지고 있는 복잡성을 사각형으로 표현한 방식이 있어서 소개하고자 합니다.
모듈이 가지고 있는 복잡성은 복잡성의 위치에 따라서 모듈 외부 복잡성과 모듈 내부 복잡성으로 나눌 수 있습니다. 모듈 외부 복잡성은 모듈 간 연결 관계, 모듈을 활용하는 데 발현되는 복잡성인 반면에, 모듈 내부 복잡성은 모듈을 구현하는 데 있어서 발생하는 복잡성을 의미합니다.
이전 글에서 소개한 모듈의 특성을 고려하면 모듈 외부 복잡성은 모듈의 환경, 모듈의 기능과 관련 있는 복잡성인 반면에, 모듈 내부 복잡성은 모듈의 로직과 관련 있는 복잡성입니다.
위 그림에 두 가지 사각형이 존재합니다. 사각형의 가로길이 W1, W2는 해당 시스템이 갖는 모듈 외부 복잡성을 의미합니다. 반면에 사격형의 세로 길이는 H1, H2는 해당 시스템이 갖는 모듈 내부 복잡성을 의미합니다. (원저에서는 Depth라고 표현되어 있습니다.)
그렇게 따지면 왼쪽의 파란색 사각형은 오른쪽 주황색 사각형보다 모듈 내부 복잡성은 작고, 모듈 외부 복잡성은 크다고 볼 수 있습니다.
해당 도형의 표현으로 알아본 모듈 외부, 내부 복잡성에 대한 몇 가지 내용을 정리해 보겠습니다.
1. 복잡성 총량 불변의 법칙
두 사각형의 넓이인 H1 X W1, H2 X W2는 동일합니다. 이것은 모듈이 갖는 총복잡성을 의미합니다. 즉, 모듈 내부 복잡성을 줄이면, 모듈 외부 복잡성이 늘어나게 되고, 반대로 모듈 외부 복잡성을 줄이면, 모듈 내부 복잡성이 늘어나게 됩니다.
이것이 뜻하는 바는 모듈을 외부에서 이용하기 쉽게 만들려면, 즉 모듈 외부 복잡성을 줄이기 위해서는 모듈 내부 복잡성이 증가하게 됩니다. 즉, 모듈을 구현하는 방식이 좀 더 어려워진다는 의미입니다.
보통 소비자가 애플의 단순하고 직관적인 UI로 애플이 만드는 제품에 끌리게 되죠. 즉, 애플 제품은 외부 복잡성을 줄인 겁니다. 그렇게 하기 위해서는 애플 내부 복잡성은 높아졌겠죠.
2. 모듈 내부 복잡성과 모듈 외부 복잡성 간의 최적화
모듈 내부 복잡성이 줄어들면, 모듈 외부 복잡성이 늘어나게 되죠. 그렇게 되면 다양한 시스템에서 해당 모듈을 사용하기가 어려울 겁니다. 즉, 모듈의 재사용성이 줄어들게 됩니다.
반면에 모듈 내부 복잡성을 늘려서, 모듈 외부 복잡성을 줄이게 되면, 다양한 시스템에서 해당 모듈을 사용하기가 쉬워지겠죠. 그런데, 모듈 내부 복잡성이 증가하면 모듈의 수명이 줄어들 수 있습니다. 모듈의 내부 로직이 복잡해지고, 외부 변화에 대응하지 못하거나 특정 환경에서만 활용할 수 있는 형태로 모듈을 만들게 되어서 모듈의 수명이 줄어들 수 있는 것이죠.
그래서, 모듈의 재사용성을 늘리기 위해서 모듈 외부 재사용성을 줄이는 것과 모듈의 수명을 늘리기 위해서 모듈 내부 재사용성을 줄이는 사이의 적정점을 찾아야 합니다. 둘 다 줄일 순 없죠. 앞에서 언급했던 것처럼 복잡성 총량은 정해져 있으니까요.
3. 모듈 구성의 기준
모듈의 복잡성이 중요한 이유 중 하나는 먼저 모듈을 구성하는 기준이 되기 때문입니다. 보통 모듈 내부 복잡성보다 모듈 외부 복잡성이 작게 모듈을 구성해야 한다는 원칙을 가지고 모듈을 구성합니다.
그런데, 모듈 내부 복잡성이 너무 크면 모듈을 쪼개는 것도 고민해야 합니다. 또는 모듈의 총복잡성이 너무 작으면 모듈을 합치는 것도 고민해야 합니다.
이번 글에서는 모듈의 복잡성을 표현하는 신선한 방식을 소개하면서 모듈과 복잡성에 대해서 다뤄봤습니다.
Image by Pete Linforth from Pixabay