[소프트웨어공학] 결합도 & 응집도

[소프트웨어공학] 결합도 & 응집도

모듈의 독립성을 판단하는 두 가지 지표이다.

  • 결합도  
    • 모듈과 모듈간의 상호 의존 정도
  • 응집도 
    • 모듈 내부의 기능적인 집중 정도

좋은 모듈화는 용도에 맞게 잘 구분된 기능을 가진 모듈들로 세분화 하는 것
즉, 개별 모듈은 독립적으로 자신에게 주어진 기능만을 수행하고 명확한 결과값을 내 놓아야 하고 다른 모듈에 의존성이 높아선 안된다.

즉, 결합도는 낮을수록 응집도는 높을 수록 이상적인 모듈화이다.

물론 결합도가 극단적으로 낮고 응집도가 극단적으로 높다고 다 좋은건 아니다.


결합도의 종류

자료 결합도 < 스탬프 결합도 < 제어 결합도 < 외부 결합도 < 공통 결합도 < 내용 결합도

  • 자료 결합도(Data Coupling)
Call by Value
    • 모듈간의 인터페이스 전달되는 파라미터인수를 통해서만 모듈간의 상호 작용
    • 깔끔한 Call by value
  • 구조 결합도(Stamp Coupling)
하나의 구조를 여러개의 모듈이 같이 사용
    • 모듈간의 인터페이스로 배열이나 오브젝트, 스트럭쳐 등이 전달되는 경우
  • 제어 결합도(Control Coupling)
명령(ex 내림,오름 차순)에 따라 제어가 달라짐
    • 단순히 처리를 해야 할 대상인 값만 전달되는게 아니라 어떻게 처리를 해야 한다는 제어 요소가 전달되는 경우
    • 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우이며, 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리전도현상
  • 외부 결합도(External Coupling)
    • 어떤 모듈에서 반환한 값을 다른 모듈에서 참조하는 경우
  • 공통 결합도(Common Coupling)
    • 파라미터가 아닌 모듈 밖에 선언되어 이는 전역 변수를 참조하고 전역변수를 갱신하는식으로 상호작용하는 경우
    • Call by reference
  • 내용 결합도(Content Coupling)
    • 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우



응집도의 종류

응집도 : 전체 시스템을 모듈 단위로 얼마나 잘 분할했는지의 척도

우연적 응집도 < 논리적 응집도 < 시간적 응집도 < 절차적 응집도 < 교환적 응집도 < 순차적 응집도 < 기능적 응집도


  • 우연적 응집도
    • 모듈 내부의 루틴들이 뚜렷한 관계없이 묶인 경우로 응집도가 가장 약하고 좋지 않은 모듈 설계이다.
  • 논리적 응집도
    • 모듈 내부의 루틴들이 같은 범주에 속하는 기능끼리 묶인 모듈이다.
  • 시기적 응집도
    • 모듈 내부의 루틴들이 시간적으로 수행 시기가 같은 기능끼리 존재한다.
    • 변수의 초기화, 파일 열기(OPEN) 및 닫기(CLOSE) 등이 여기에 속한다.
  • 절차적 응집도
    • 모듈 내부의 루틴들이 수행 시기가 순위가 있는 기능끼리 존재하는 경우의 모듈이다.
  • 교환적 응집도
    • 모듈 내부의 루틴들이 작업 대상이 같은 기능끼리 존재하는 경우의 모듈이다.
  • 순차적 응집도
    • 모듈 내부의 루틴(구성 요소)들이 이전의 명령어(활동)으로부터 나온 출력 결과(자료)를 그 다음 명령어(활동)의 입력 자료로 사용하는 경우의 응집도
  • 기능적(함수적) 응집도
    • 모듈 내부가 하나의 단일 기능으로 존재하는 경우로 응집도가 강하고 가장 좋은 모듈



댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?