모듈은 흔하게 사용하면서도 정확한 의미를 알지 못하는 용어 중 하나입니다. 물론, 이 용어를 사용할 때는 모듈이 가지고 있는 특성을 고려했기에 틀린 활용이라고 할 순 없지만, 과연 모듈이 가지고 있는 특성마저도 이해하고 있을지 궁금해지기도 합니다.
1. 모듈은 시스템을 구성하는 한 부분입니다.
모듈이 모이면 모듈보다 규모가 큰 시스템이 됩니다. 그런 의미에서 모듈은 시스템의 구성요소라고 할 수 있습니다. 그렇다면 시스템을 구성하는 모든 것들이 모듈일까요? 부품, 어셈블리, 코드, 함수, 클래스, 서브시스템, 블록 등 시스템을 구성하는 모든 것들이 모듈인 걸까요?
2. 시스템을 구성하는 요소 중 하나인 모듈은 또 하나의 시스템입니다.
즉, 모듈은 시스템을 구성하는 요소이지만, 그 자체로도 하나의 시스템이 되어야 합니다. 자 여기서 혼돈해선 안 되는 것이 모듈이 또 하나의 시스템이라고 해서 독립적으로 작동할 수 있다는 것을 의미함은 아니라는 겁니다. 시스템은 말 그대로 입력을 받고, 출력을 내보는 과정에서 스스로 자발적인 기능을 발휘하는 존재를 의미합니다. 그래서, 모듈은 독립된 기능성을 갖는 시스템이 되어야 합니다.
3. 모듈은 스스로 완결성을 갖추고 있어야 합니다.
모듈이 또 하나의 시스템이 되기 위해서는 모듈 스스로 완결성을 갖추고 있어야 합니다. 시스템이기 때문에 독립적으로 기획하고 설계도 가능하고, 독립적으로 생산, 구매, 판매도 가능합니다. 그렇게 하기 위해서는 독립적으로 품질을 점검하고, 완결 지을 수도 있어야 합니다.
4. 모듈은 외부와의 독립성을 가지고 있어야 합니다.
모듈이 스스로 완결성을 갖추기 위해서는 외부 환경뿐만 아니라, 타 모듈과의 독립성을 유지하고 있어야 합니다. 독립적이지 않고, 서로 의존하면서 작동을 해야 한다면 그것은 서로 연결되어 있다고 보고 하나의 모듈로 묶는 것이 바람직할 겁니다.
5. 모듈은 시스템과, 다른 모듈들과 분리된 라이프 사이클을 가져야만 합니다.
모듈은 외부와의 독립성을 갖기 때문에 시스템 자체, 다른 모듈들과 분리된 라이프 사이클을 갖습니다. 시스템과 생성이 동일하더라도 모듈이 더욱더 수명이 길어서 재사용이나 공용화, 재활용이 가능할 수도 있고, 아니면 시스템이 더욱더 수명이 길기 때문에 모듈이 교체되거나 업그레이드되는 상황이 발생할 수 있습니다.
6. 모듈은 규칙입니다.
위 모듈이 다른 모듈과 분리된 라이프 사이클을 갖기 위해서는 모듈은 다른 모듈과 연결되는 방식, 작동하는 방식 자체가 사전에 정해져 있어야 하고, 그것이 준수되어야 합니다. 나중에 소개하겠지만, 이것이 정형화되어 표현된 결과물이 인터페이스인 것이고, 준수해야만 하는 규칙을 디자인 룰이라고 부른 것입니다.
제가 가장 많은 예를 드는 모듈 사례가 여러분이 자주 사용하는 프린터의 토너입니다. 토너는 시스템과 달리 소모, 소비라는 제품 변화를 겪습니다. 그래서, 프린터를 사면 프린터의 수명과 관계없이 토너를 교체를 자주 합니다. 이것 자체가 프린터와 토너가 서로 라이프 사이클이 다름을 의미하죠. 그뿐 아닙니다. 하나의 토너 모델이 여러 가지의 프린터를 대응합니다. 이 또한 서로 간의 라이프 사이클이 분리됨을 알 수 있습니다. 이 때문에 토너는 시스템에서 교체하기 쉽고 분리되도록 모듈로 만듭니다.
정리하면, 토너가 모듈이라는 것은 다음과 같은 특성을 갖는 것으로 알 수 있습니다.
토너는 프린터라는 시스템을 구성하는 하나의 구성요소입니다.
토너 자체는 독립적으로 설계, 개발, 생산, 판매가 가능한 하나의 시스템입니다.
토너는 독립적으로 설계, 개발, 생산, 판매, 품질 검증까지 가능하도록 완결성을 갖추고 있습니다.
토너는 프린터에서 교체하기 쉽도록 독립적으로 구성되어 있습니다.
토너와 프린터 간의 인터페이스는 표준화가 되어 있습니다.
지금까지 소개한 모듈의 특성은 서로 연결이 되어 있습니다.
모듈의 개념을 이해하는 데 도움이 될 것으로 기대합니다.