결합도, 응집도

전주현·2023년 11월 9일
0

개념 정리

목록 보기
4/5
post-thumbnail

1. 모듈화

  • 소프트웨어를 각 기능별로 나누는 것
  • 프로그램이 효율적으로 관리될 수 있도록 시스템을 분해하고 추상화함으로써 소프트웨어 제품의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리를 용이하게 하는 기법
  • 모듈은 소프트웨어 내의 프로그램 또는 작업 단위

모듈의 독립성

  • 모듈은 주어진 기능만을 독립적으로 수행하며 다른 모듈과 적게 연관되어야 함
  • 모듈의 결합도(Coupling)와 응집도(Cohesion)으로 측정
  • 독립성이 높을 수록 수정 시 다른 모듈에 미치는 영향이 작으므로 좋은 모듈임

- 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게

모듈의 크기

  • 모듈의 크기가 너무 작으면 모듈 개수가 많아져서 통합 비용이 많이 들고
  • 모듈의 크기가 너무 크면 모듈 하난를 개발하는데 드는 비용이 커진다

2. 결합도

서로 다른 모듈 간 상호 의존한느 정도 또는 두 모듈 사이의 연관된 관계

자료 결합도(Data Coupling)

  • 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호작용이 일어나는 경우
  • 순수한 자료형 요소

스탬프 결합도(Stamp Coupling)

  • 모듈 간의 인터페이스로 배열이나 오브젝트, 스트럭처 등이 전달되는 경우
  • 자료 구조의 형태 변경 시 참조하고 있는 모든 모듈에 영향 미침
  • 변경되는 필드를 실제로 참조하지 않는 모듈에도 영향 미침

제어 결합도 (Control Coupling)

  • 단순 처리할 대상인 값만 전달되는 게 아니라 어떻게 처리를 해야 한다는 제어 요소가 전달되는 경우
    ex) 파라미터로 전달되는 값에 따라 모듈 내부 로직이 처리가 달라지는 Flag 값 등으로 결합

외부 결합도(External Coupling)

  • 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성들이 그 기능을 순차적으로 수행할 경우
  • 특수한 외부환경에 종속 또는 연관되어있는 경우
    ex) 외부의 데이터, 통신 프로토콜 등을 공유할 때 참조되는 데이터의 범위가 각 모듈에서 제한

공통 결합도(Common Coupling)

  • 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 갱신하는 식으로 상호작용하는 경우

내용 결합도(Content Coupling)

  • 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우

참고 사항

변경될 가능성이 적은 모듈의 경우, 결합도가 높아도 문제가 되지 않을 수 있음 ex) 표준 라이브러리

3. 응집도

모듈 내부에서 구성 요소 간에 밀접한 관계를 맺고 있는 정도

기능적 응집도(Functional Cohesion)

  • 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우
    ex) 코사인(cosine)과 같은 삼각함수를 계산하는 기능을 모아둔 함수

순차적 응집도(Sequential Cohesion)

  • 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동에 사용할 경우
    ex) 어떤 모듈이 특정 파일을 읽어와 처리하는 기능

통신적 응집도(Communication Cohesion)

  • 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있는 경우

절차적 응집도(Procedural Cohesion)

  • 모듈이 다수의 관련 기능을 가질 때, 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행하는 경우
    ex) 파일을 읽을 때 접근 허가를 확인한 후 파일을 읽음

시간적 응집도(Temporal Cohesion)

  • 연관된 기능이라기보다는 특정 시점에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우
    ex1) 프로그램 구동 시 초기화 시키는 모듈
    ex2) 예외 상황 발생 시 오류 로그를 개발자에게 전송

논리적 응집도(Logical Cohesion)

  • 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우

우연적 응집도(Coincidental Cohesion)

  • 모듈 내부의 각 구성 요소들이 연관이 없는 경우

4. 복잡도

팬인/팬아웃을 분석하여 프로그램의 복잡도를 조절할 수 있음

팬인(Fan In)

  • 자신을 사용하는 타 모듈의 수
  • 공통 모듈화 측면에서 잘 설계되어 있으나 단일 실패점 발생 가능 -> 중점 관리 및 더 많은 테스트를 통한 검증 필요

팬아웃(Fan Out)

  • 자신이 호출하는 타 모듈의 수
  • 불필요한 기능을 호출하는지, 로직을 단순화시킬 수 있는지 검토

참고 사이트

profile
개발

0개의 댓글

관련 채용 정보