- Today
- Total
빵 입니다.
응집도와 결합도 본문
📌 응집도(Cohesion)
- 모듈 내부의 기능적인 집중 정도
- 응집도 높을 수록 ⬆️ 이상적
- 코드들이 얼마나 끈끈한가
- 명령어, 명령어의 모임, 호출문, 특정 작업 수행 코드 등 모듈 안의 요소의 관련 정도
- 모듈 간 최소한의 상호작용 & 하나의 기능만 수행하는 정도
- 모듈이 독립적 기능으로 구성됨의 정도
- 응집도 높을수록, 필요 요소들로 구성되어 있다.
- 응집도 낮을수록, 요소 간 관련성이 적다.
- 결제 모듈 안엔, 결제 관련 내용만 있다.
- 모듈 내부 구성 기준을 무엇에 둘 것인가
📌 응집도가 낮은 클래스의 문제점
- 이해하기 어려움
- 재사용하기 힘듦
- 유지보수가 어려움
- 다른 클래스의 변화에 민감함
📌 응집도의 종류
기능적 응집도 > 순차적 응집도 > 교환적 응집도 > 절차적 응집도 > 시간적 응집도 > 논리적 응집도 > 우연적 응집도
📍기능적 응집도(Functional Cohesion)
모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우
= 모듈 내부의 모든 기능 요소들이 한 문제와 연관
📍순차적 응집도(Sequential Cohesion)
모듈 내에서 한 활동으로 부터 나온 출력값을 다른 활동이 사용할 경우
= 한 모듈의 한 기능의 출력 자료가 다음 기능 요소의 입력 자료로 제공
📍교환적 응집도(Communication Cohesion)
동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우
= 같은 입출력 사용하는 소작업 모임
📍절차적 응집도(Procedural Cohesion)
모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우
= 모듈이 다수의 관련 기능 가질 때, 모듈 내부의 기능 요소들이 그 기능 순차적 수행
📍시간적 응집도(Temporal Cohesion)
연관된 기능이라기 보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우
= 특정 시간에 처리되는 여러 기능 모아서 한 개의 모듈로 작성
📍논리적 응집도(Logical Cohesion)
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
= 유사 성격, 특정 형태로 분류되는 처리 요소들로 하나의 모듈 형성
📍우연적 응집도(Coincidental Cohesion)
모듈 내부의 각 구성요소들이 연관이 없을 경우
= 모듈 내부에 서로 관련 없는 요소로만 구성
📌 결합도(Coupling)
- 모듈과 모듈간의 상호 의존 정도
- 결합도 낮을 수록 ⬇️ 이상적
📌 결합도가 높은 클래스의 문제점
- 연관된 다른 클래스가 변경되면 더불어 변경이 필요하다.
- 수정하려는 클래스를 이해하기 위해 연관된 클래스를 함께 이해해야한다.
- 다른 프로그램에서의 클래스를 재사용하기 힘들다.
- 모듈 간 의존도
- 모듈 간 기능적 연관 정도
- 모듈 간 결합도 약할수록 독립성 향상되고, 구현 유지보수 쉽다.
- 자료 결합도 설계 품질이 가장 좋다.
- 결합도에서 인터페이스는 서로 연결을 의미한다.
📌 결합도의 종류
자료 결합도 < 스탬프 결합도 < 제어 결합도 < 외부 결합도 < 공통 결합도 < 내용 결합도
📍자료 결합도(Data Coupling)
모듈간의 인터페이스 전달되는 파라미터를 통해서만 모듈간의 상호 작용이 일어나는 경우. 깔끔한 Call by value
= 모듈 간 연결이 자료 요소로만 구성
= 가장 바람직
= 모듈 간 내용 알 필요 없음
📍스탬프 결합도(Stamp Coupling)
모듈간의 인터페이스로 배열이나 오브젝트, 스트럭쳐등이 전달되는 경우.
= 두 모듈이 같은 자료 구조 조회하는 경우의 결합도
= 포맷, 구조의 변화 => 조회하는 모든 모듈에 영향
= 배열, 레코드, 구조 등 모듈 간 인터페이스로 전달되는 경우
📍제어 결합도(Control Coupling)
단순히 처리를 해야할 대상인 값만 전달되는게 아니라 어떻게 처리를 해야 한다는 제어 요소(DCD, Flag등)이 전달되는 경우.
= 다른 모듈의 내부 논리 조작 제어를 위해
= 제어 신호 이용하여 통신하는 경우
= 하위 모듈에서 상위 모듈로 제어 신호 이동하여, 상위 모듈에 처리 명령 부여 => 권리 전도 현상
📍외부 결합도(External Coupling)
어떤 모듈에서 반환한 값을 다른 모듈에서 참조해서 사용하는 경우
= 외부 선언 변수를 가져다 쓰는 경우
📍공통 결합도(Common Coupling)
파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역변수를 갱신하는 식으로 상호작용하는 경우
= 공통 자료 영역 사용
= 공통 자료 수정 시 끔찍
📍내용 결합도(Content Coupling)
다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용 하는 경우
= 가장 강한 결합도
= 한 모듈이 다른 모듈의 내부 기능, 자료 조회하도록
= 한 모듈에서 다른 모듈의 내부 제어, 이동
= 한 모듈이 다른 모듈 내부 자료 조회, 변경
= 두 모듈 간 같은 문자 공유 가능