모듈(Module)
모듈(Module)
- 프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것이다.
단순히 규모가 큰 것을 작게 여러 개로 나눈 조각이 아니라, 하나 이상의 논리적인 기능을 수행하기 위한 명령어들의 집합이라 할 수도 있다. 모듈은 독립적인 프로그램 그 자체일 수도 있고 함수나 메서드일 수도 있다. 모듈이 되려면 다른 것들과 구분될 수 있는 독립적인 기능을 가져야 하고 유일한 이름을 사용해야 한다. 그리고 다른 프로그램이나 또 다른 모듈에서 호출하여 사용할 수도 있어야 한다. 또, 모듈 자체로서 재사용될 수 있고 독립적으로 컴파일이 가능해야 한다는 중요한 특징을 포함해야 한다. 따라서 모듈은 다양한 형태로 존재할 수 있는데 용도가 비슷한 함수나 추상화된 자료, 객체(Object), 메서드(Method)등이 이에 해당한다.
모듈은 계층적인 스포트웨어를 설계할 때 한 계층의 부분을 차지하는 단위이다. 각 모듈은 상위 계층에 제공하는 인터페이스, 자신이 담당하는 인터페이스, 하위 계층에 의존성을 가지는 인터페이스 등 3개의 계층으로 나눌 수 있다. 이렇게 설계가 이루어진 모듈은 이식성(Portability)과 호환성(Compatibility)이 높다. 제대로 분리되지 않은 모듈들은 내부적으로 수정이 발생했을 때 상위 모듈에 영향을 미치게 되고, 이로 인해 구체적인 부분이 외부로 노출되게 된다.
모듈화(Modularization)
- 모듈화 프로그래밍이란 이런 기능적인 분리를 통해서 다른 프로그램을 개발할 때에도 유지보수와 코드 재사용성을 높여 소프트웨어를 설계하는 기법을 일컫는다.
모듈화를 할 때 가장 먼저 결정할 것은 '어느 정도의 크기로 모듈을 분리할 것인가'이다. 작게 나누면 좋지만 무조건 작다고 해서 좋은 것은 아니다. 모듈이 작아지면 작아질수록 그 개수도 늘어나고 그 사이에서 통신 횟수가 증가하면 과부하로 인해 성능이 떨어지고 복잡도가 증가하기 때문이다. 따라서 모듈의 크기를 결정지을 때는 문제의 특성이나 유형에 알맞게 결정해야 한다. 정해진 크기의 모듈은 없지만 모듈 간의 결합은 느슨하게, 모듈 내 구성 요소들 간의 응집은 강하게 한다는 규칙을 지키면 좋은 설계가 될 수 있다.
모듈화를 하게 되면 분할과 정복(Divide And Conquer)의 원리가 적용되어 프로그램의 복잡한 정도가 줄어들고 이해하기가 더 쉬워진다. 가독성도 좋다. 또한 변경하기가 쉬워지고, 모듈은 독립적이므로 변경했을 때 다른 부분에 미치는 영향도 감소한다. 이로 인해 유지보수가 용이해지며 프로그램을 효율적으로 관리할 수 있다. 오류가 줄어드므로 오류에 인한 또 다른 파급효과도 최소화할 수 있게 된다. 두 모듈 간의 관련성이 적을 때 각각의 모듈은 서로 독립적으로 존재하게 되어 소프트웨어를 유지 보수함에 있어서 효율성은 더 높아진다고 볼 수 있다. 따라서 모듈을 분리하여 설계할 때에 되도록이면 모듈 간의 관련성을 적게 하여 모듈 간에 미치는 영향을 최소화하여 유지보수를 쉽게 해야 한다. 이렇게 모듈이 서로 얼마나 독립적인가를 측정하는 개념이 바로 응집도와 결합도이다.
모듈화의 원칙으로는 개별 기능별로 하나의 완결된 구조를 가져야 하고, 각 모듈별로 독립성을 가져야 하고, 각 모듈은 반드시 입 · 출구가 있어야 한다.
응집도(Cohesion)
- 응집도는 모듈 안에 존재하는 구성 요소들 간에 얼마나 밀접한가를 나타내는 것으로, 하나의 모듈 내에서 구성요소들이 뭉쳐 있는 정도로 평가한다.
응집도가 높다는 것은 구성 요소들이 꼭 필요한 것들만 모여있는 것이고 응집도가 낮을수록 구성 요소 간의 관련성이 적다는 것을 의미한다. 응집도의 품질에는 높은 순서에서 낮은 순서대로 기능적 응집도, 순차적 응집도, 교환적 응집도, 시간적 응집도, 논리적 응집도, 우연적 응집도가 있다.
결합도(Coupling)
- 앞서 살펴본 응집도가 하나의 모듈 안에서 구성 요소들 간의 연결 정도를 나타내는 것이라면 결합도는 각 모듈 간의 관련 있는 정도를 나타낸다.
모듈 간에는 관련성이 적을수록 서로 의존하는 정도가 줄어서 모듈의 독립성이 높아지고, 독립성이 높으면 모듈 간에 미치는 영향이 줄어들어 좋은 설계가 이루어질 수 있다. 모듈 간에 서로 연관성이 없으면 좋지만, 연관이 있다고 하더라도 서로 영향을 적게 받으려면 이를 제어하는 방향보다는 데이터를 상호 교류하는 방법이 바람직하다. 결합도의 품질에는 높은 순서에서 낮은 순서대로 내용 결합, 공통 결합, 제어 결합, 스탬프 결합, 데이터 결합이 있다.
모듈(Module)과 모듈화(Modularization)에 대한 정의와 이해
모듈(Module) 모듈이란 프로그램을 구성하는 시스템을 기능 단위로 독립적인 부분으로 분리한 것이다. 단순히 규모가 큰 것을 작게 여러 개로 나눈 조각이 아니라, 하나 이상의 논리적인 기능을
iwuooh.com