Skip to content

Posts On the criteria to be used on decomposing systems into modules #
Find similar titles

David Parnas의 논문인 시스템을 모듈로 나누는 기준에 대하여(On the criteria to be used in decomposing systems into modules)를 요약하고자 한다.

소개 #

저자는 워낙 유명한 사람이니 설명을 생략하고 논문 자체에 대해서만 간단히 소개하겠다. 1972년에 CACM에 실린 논문이며, 정보 은닉(Information hiding)과 계층적 구조(hierarchical structure)라는 원칙에 의거하여 시스템을 모듈화하는 것이 좋다는 제안을 담고 있다. 많은 사람들이 이 논문을 통해 소프트웨어 공학(Software engineering) 분야의 모듈 개념 및 정보 은닉 개념이 정립된 것으로 보고 있다.

요약 #

논문의 앞부분은 정보은닉을 설명한다. 동일한 시스템에 대한 두 가지 모듈화 사례를 제시한 후 이 중 정보 은닉에 기반한 모듈화가 다양한 장점을 갖는다는 점을 보이고 있다. 여기에서 말하는 정보 은닉이란 "내부의 작동 방식에 대해 최대한 숨기는 방식으로 설계된 인터페이스 혹은 정의"를 말한다. 이렇게 모듈화가 될 경우 다음과 같은 장점을 얻을 수 있다. 첫째, 각 모듈간 간섭이 최소화되기 때문에 병렬 개발이 가능해진다. 둘째, 시스템의 구체적인 작동 방식이 개별 모듈 내부로 응집되기 때문에 변화가 생길 경우 이에 대한 여파가 최소화 된다(논문 내에서 직접 이 표현을 쓰고 있지는 않지만 요즘 쓰이는 말로 표현하자면 ripple effect가 최소화 된다는 얘기이다). 셋째, 전체 시스템이 아닌 각 모듈 단위만으로도 이해가능한 의미있는 단위가 된다.

후반부는 계층적 구조와 재활용성을 설명한다. 정보 은닉이라는 기준에 더하여 명확한 계층 구조라는 기준까지 만족하면 하위 모듈에 대한 재활용성을 획득할 수 있다는 주장이다. 여기에서 말하는 명확한 계층 구조란 쉽게 말해서 상위 수준의 모듈과 하위 수준의 모듈을 명확히 나누고 상위에서 하위로의 의존만 발생되는 구조를 이야기 한다. 이렇게 할 경우 새로운 상위 수준의 모듈을 만들면서 기존의 하위 수준 모듈 중 일부를 재활용할 수 있게 된다는 것이다. 현존하는 거의 대부분의 라이브러리/API들이 이런 식으로 재활용 된다.

여기에서 제안된 설계는 두 단계의 수준으로 구성되어 있지만 대부분의 소프트웨어는 여러 단계의 수준을 갖는다.

부연 #

이 논문이 소개하는 방식의 계층적 구조는 재활용성을 높여주기는 하지만 제약이 있다. 하위 수준의 모듈만 재활용될 수 있다는 점이 제약이다. 상위 수준의 모듈이 재활용 되려면 하위 수준에서 상위 수준으로 올라가는 의존 관계가 필요해지는데, 이렇게 하면 순환 참조(Circular dependency)가 만들어지고 결국 상위/하위 모두 독립적으로 재활용되기가 힘들어진다. 따라서 순환 참조가 일어나지 않으면서도 하위 모듈에서 상위 모듈로 올라가는 의존을 만들 필요가 있다.

객체지향프로그래밍(Object-oriented programming)에서는 다형성(Subtype polymorphism)을 통한 의존성 역전(Dependency inversion)으로 이 문제를 해결한다.

Incoming Links #

Related Articles #

Suggested Pages #

Other Posts #

0.0.1_20140628_0