결합도란
서로다른 모듈간에 상호 의존하는 정도나 연관된 관계를 의미
모듈 - 소프릍웨어를 각 기능별로 나누는 것.// 각 모듈은 주어진 기능만을 독립적으로 수행
> 다른 클래스와 연관된 정도가 높다 > 해당 클래스를 변경하려면 연관된 클래스도 변경 > 클래스 재사용이 어려움
따라서 결합도가 낮을수록 좋음
자료 결합도
가장 낮은 결합도로 가장 좋은 형태 - 모듈끼리 단순히 파라미터를 통해 데이터를 주고받는 경우
public void preson(){
String name = student("ingwang")
}
public String student(Stringt name){
return name ;
}
스탬프 결합도
두 모듈이 동일한 자료 구조를 참조하는 형태의 결합도 ㄴ 모듈 간의 인터페이스로 배열, 오브잭트 등이 전달되는 경우
>자료 구조의 형태가 변경되면 참조하는 모든 모듈에 영향을 준다
제어 결합도
모듈이 다른 모듈 내부의 논리적인 흐름을 제어하는 요소를 전달하는 경우
public void preson(){
student(true);
}
public String student(boolean member){
if(member){
~
}else {
~
}
}
맴버의 여부에 따라 로직이 달라짐
외부 결합도
모듈이 외부에 있는 다른 모듈이나 데이터를 참조할 떄의 결합 형태
ㄴ 모듈의 외부 데이터, 통신 프로토콜 등을 공유할 때 발생
공통 경합도
여러 모듈이 하나의 데이터 영역을 참조하여 사용하는 형태
전역 변수를 예로 들 수 있다. 전역변수의 변경이 여러 모듈에 영향을 끼칠 수 있다..
여러 메서드 안에서 사용되는 리스트 형식의 변수를 메서드 밖에서 빼 사용했는데 전역변수를 공유하기 때문에 전역변수의 값이 변경되어 여러 모듈에 영향을 끼침
내용 결합도
가장 높은 결합도로 가장 좋지 않은 결합
모듈이 사용하려는 다른 모듈의 내부 기능과 데이터를 직접 참조하는 경우
응집도 란
모듈 내부의 처리 요소들이 서로 관련되어 있는 정도
모듈이 하나의 기능을 중심으로 잘 뭉쳐있는지를 나타냄 > 응집도가 높을 수 록 좋다.
기능적 응집도
가장 높은 응집도로, 가장 좋은 형태 / 모듈 내의 모든 요소들이 하나의 기능을 수행 하기 위해 구성된 경우
순차적 응집도
한 요소의 출력이 다른 요소의 입력으로 사용되는 형태
ex) 모듈이 특정 파일을 읽고 처리하는 기능
통신적 응집도
모든 요소들이 동일한 입력 또는 출력 데이터를 사용하여 서로 다른 기능을 수행하는 경우
절차적 응집도
모듈 내에서 여러 개의 기능 요소가 순차적으로 수행되지만 다음 기능 요소로 데이터가 아닌 흐름 제어 요소가 전달되는 경우
ex) 데이터를 확인할 때 접근 허가를 확인 한 후에 데이터를 확인하는 형태
일시적 응집도
각 기능 요소들이 순서에 상관없이 특정 시점에 반드시 수행되는 경우
ex)예외 상황 발생시 오류 메시지를 개발자에게 전송하는 기능 등 순서에 상관없는 경우
논리적 응집도
유사한 성격을 갖거나 특정 형태로 분리되는 처리 요소들로 모듈을 구성하며 논리적으로 비슷한 기능을 수행하지만 서로 관계는 밀접하지 않은 형태
우연적 응집도
모듈 내부의 각 구성 요소들이 아무런 관련 없이 구성된 형태