본문 바로가기
소년의 IT 쉽게 이해하기/개발 쉽게 이해하기

모듈(Module) 쉽게 이야기하기

by Circlezoo 2022. 2. 10.

 모듈이라는 용어를 쓰는 곳은 다양하게 있지만 프로그래밍 관점에서 한 번 살펴보고자 합니다.

 

Q. 모듈이란 뭔가요?

 

 모듈이란 소프트웨어 설계에 가장 중요한 부분이며 시스템의 커다란 덩어리를 부분적으로 분할하고 복잡한 문제를 작고 간결한 부분으로 나누어서 하자!라고 하는 하향식 모델 기법 중 한 개입니다.

모듈의 독립성을 높이기 위해서는 결합도는 줄이고 응집도는 높이는 것이 좋습니다.

만약 모듈의 독립성이 높을 경우 다른 모듈에 영향을 주지 않음으로 수정이 용이하며 재사용성이 가능하게 됩니다.

 

Q. 모듈의 결합도를 줄인다. 모듈의 응집도를 높인다 이런 것은 어떻게 평가하나요?

 

 응집도란 한 모듈 안에 있는 각각의 구성요소의 기능적인 연관성을 평가하는 것을 말합니다.

응집도가 높을수록 당연히 모듈의 독립성은 높아지게 됩니다.

 결합도라는 것은 모듈과 또 다른 모듈 간의 연관성의 정도를 말하며 좋은 설계라고 하는 것은 결합도가 최소가 되는 것을 말합니다.

 

 응집도가 높다라는 것을 생각했을 때 응집도를 분류할 수 있겠구나라는 것을 예측할 수 있습니다.

응집도는 낮은 것부터 높은 것까지 아래의 순서대로 분류되어있습니다. (1이 가장 낮은 것)

1. 우연적 응집도 -> 2. 논리적 응집도 -> 3. 시간적 응집도 -> 4. 절차적 응집도 -> 5. 통신적 응집도 -> 6. 순차적 응집도 -> 7. 기능적 응집도

 

1. 우연적 응집도: 서로 관련 없는 요소가 우연히! 모듈 안에 들어가 있다.

2. 논리적 응집도: 유사한 기능이 하나의 모듈 안에 기능에 정의된 경우 매게 변수에 따라 결과가 달라진다.

3. 시간적 응집도: 특정 시점에는 서로 연결성이 있다.

4. 절차적 응집도: 모듈 내에 명령의 기능이 절차에 맞게 처리가 된다.

5. 통신적 응집도: 여러 가지 기능을 수행하며 모듈 내의 각각의 요소들이 같은 입력자료를 이용한다.

6. 순차적 응집도: 모듈 내의 상위 line의 출력 요소가 하위 line의 입력 요소로 사용된다.

7. 기능적 응집도: 모듈 내의 요소가 갖는 기능 요소들이 단일 문제와 연관되어 수행된다.

 

 결합도 역시 응집도와 마찬가지로 낮은 것부터 높은 것까지 순서대로 분류할 수 있습니다.

1. 이 가장 낮은 것입니다.

1. 자료 결합도 -> 2. 스탬프 결합도 -> 3. 제어 결합도 -> 4. 외부 결합도 -> 5. 공통 결합도 -> 6. 내용 결합도

 

1. 자료 결합도: 두 모듈 사이에 필요한 자료만 전달한다.

2. 스탬프 결합도: 두 모듈 사이에 자료 구조로 전달할 수 있게 결합된 것으로 불필요한 자료가 전달될 수 있다.

3. 제어 결합도: 제어 신호를 전달할 수 있다.

4. 외부 결합도: 전역 변수(두 모듈 사이에 값에 대한 의존도가 생김)로 선언된 공유자료를 전달한다.

5. 공통 결합도: 공통 주소를 사용하여 전달한다.

6. 내용 결합도: 두 모듈 간의 내용으로 전달하여 내용이 변경되면 모든 모듈에 영향을 준다.

 

모듈의 독립성을 높이기 위해서는 응집도는 기능적 응집도 결합도는 자료 결합도인 것이 가장 좋겠습니다.

 

Q. Fan-in, Fan-out 이런 것은 뭔가요?

 

Fan-in이라고 하는 것은 나를 호출하는 상위 모델의 개수를 이야기합니다.

Fan-out은 나를 호출하는 하위 모델의 개수를 이야기합니다.

 

이것이 무슨 관계가 있을까?

Fan-in이 높다는 것은 재사용적인 측면에서 설계가 잘 되어 있다고 볼 수 있고

Fan-out이 높다라는 것은 불필요하게 다른 모듈을 호출하고 있는 것은 아닌지 확인이 필요하다고 볼 수 있습니다.

즉, Fan-in이 높고 Fan-out이 높으면 시스템의 복잡도가 낮다고 볼 수 있습니다.

 

Q. 코드라는 것도 조금 알 수 있을까요?

 

제품 바코드 출처: https://itfix.tistory.com/418

 

 코드라는 것은 컴퓨터에서 데이터를 처리하는 과정에서 조합 및 집계를 용이하게 하고, 특정 자료의 추출을 쉽게 하기 위해서 사용하는 기호입니다.

이 코드라는 것은 화면 ID, 기능 ID를 비롯해서 주민번호, 제품 번호 등 다양한 곳에서 볼 수 있습니다.

코드의 주요 기능은 분류 기능, 식별 기능, 배열 기능 이 3가지를 꼽을 수 있습니다.

 

코드의 종류 몇 가지 정리해보겠습니다.

 

1. 순차 코드: 처음부터 차례대로 일련번호를 부여하는 방법입니다.

이 방법을 사용하기 위해서는 항목수가 적어야 하고 변경이 적어야 합니다.

위에서부터 아래로 그냥 순차적으로 번호를 매기기 때문에 중간의 변경에 대해서 취약합니다.

 

2. 블록 코드: 코드화 대상항목 중 서로 공통적인 것 끼리 블록으로 구분하는 방법입니다.

각 블록 내에서 일련번호로 공통적인 것끼리 묶는 방식입니다.

 

3. 그룹 분류식 코드: 코드화 대상항목을 일정 기준에 따라 대분류, 중분류, 소분류로 구분합니다.

그리고 각 그룹 안에서 일련번호로 구분합니다.

이 방법의 경우는 주민번호나 제품번호와 같이 분류기준이 명확한 경우 사용하게 됩니다.

 

4. 10진 코드: 코드와 대상항목을 0~9까지 10진수로 구분하는 것을 이야기합니다.

 

5. 표의 숫자 코드: 유효한 기호, 물체의 길이, 부피, 너비 지름과 같은 것을 그대로 코드로 적용시키는 것을 이야기합니다. 이런 코드는 책상이나 사물에서 길이 같은 것이 들어가 있는 것을 볼 수 있고 노트북과 같은 곳에서는 용량 같은 내용을 코드에 함께 적어놓은 것을 볼 수 있습니다.

 

6. 연산 코드: 관계있는 숫자나 문자 기호를 이용하여 코드를 부여하는 방법을 말합니다.

코드만 보고도 물건이 연상이 되도록 코드를 만듭니다.

 

Q. 공통 모듈이란 뭔가요?

 

 자주 사용되는 계산식이나 매번 필요한 기능들이 공통 모듈로 구성될 수 있습니다.

모듈의 재사용성 확보와 중복 개발 회피를 위해서 설계과정에서 공통 부분을 식별하고 명세를 작성할 필요가 있습니다.

 

공통 모듈 명세 기법을 위해 필요한 사항

  • 정확성: 필요하다는 것을 알 수 있게 정확하게 작성해야함
  • 명확성: 누가 읽어도 알 수 있게 명확하게 작성되어야함
  • 완전성: 구현작업을 위해 필요한 모든 작업을 다 기술해야함
  • 일관성: 각 기능들간에 상호 충돌이 발생하지 않도록 작성해야함
  • 추적성: 요구사항을 제대로 시행했는 지 여부를 언제라도 검토할 수 있도록 작성해야함.

 

Q. 공통 모듈을 꼭 만들어야 하나요?

 

 공통 모듈을 만드는 이유는 재사용때문입니다.

재사용은 개발 비용과 시간을 절약하기 위해서 하는 것이고 재사용에 적용되는 요소는 함수, 객체, 컴포넌트, 응용프로그램이 있습니다.

반응형

댓글