모듈의 크기
- 모듈의 크기가 너무 작으면 모듈 개수가 많아져서 통합 비용이 많이 들고
- 모듈의 크기가 너무 크면 모듈 하난를 개발하는데 드는 비용이 커진다
서로 다른 모듈 간 상호 의존한느 정도 또는 두 모듈 사이의 연관된 관계
- 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호작용이 일어나는 경우
- 순수한 자료형 요소
- 모듈 간의 인터페이스로 배열이나 오브젝트, 스트럭처 등이 전달되는 경우
- 자료 구조의 형태 변경 시 참조하고 있는 모든 모듈에 영향 미침
- 변경되는 필드를 실제로 참조하지 않는 모듈에도 영향 미침
- 단순 처리할 대상인 값만 전달되는 게 아니라 어떻게 처리를 해야 한다는 제어 요소가 전달되는 경우
ex) 파라미터로 전달되는 값에 따라 모듈 내부 로직이 처리가 달라지는 Flag 값 등으로 결합
- 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성들이 그 기능을 순차적으로 수행할 경우
- 특수한 외부환경에 종속 또는 연관되어있는 경우
ex) 외부의 데이터, 통신 프로토콜 등을 공유할 때 참조되는 데이터의 범위가 각 모듈에서 제한
- 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 갱신하는 식으로 상호작용하는 경우
- 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우
변경될 가능성이 적은 모듈의 경우, 결합도가 높아도 문제가 되지 않을 수 있음 ex) 표준 라이브러리
모듈 내부에서 구성 요소 간에 밀접한 관계를 맺고 있는 정도
- 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우
ex) 코사인(cosine)과 같은 삼각함수를 계산하는 기능을 모아둔 함수
- 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동에 사용할 경우
ex) 어떤 모듈이 특정 파일을 읽어와 처리하는 기능
- 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있는 경우
- 모듈이 다수의 관련 기능을 가질 때, 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행하는 경우
ex) 파일을 읽을 때 접근 허가를 확인한 후 파일을 읽음
- 연관된 기능이라기보다는 특정 시점에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우
ex1) 프로그램 구동 시 초기화 시키는 모듈
ex2) 예외 상황 발생 시 오류 로그를 개발자에게 전송
- 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
- 모듈 내부의 각 구성 요소들이 연관이 없는 경우
팬인/팬아웃을 분석하여 프로그램의 복잡도를 조절할 수 있음
- 자신을 사용하는 타 모듈의 수
- 공통 모듈화 측면에서 잘 설계되어 있으나 단일 실패점 발생 가능 -> 중점 관리 및 더 많은 테스트를 통한 검증 필요
- 자신이 호출하는 타 모듈의 수
- 불필요한 기능을 호출하는지, 로직을 단순화시킬 수 있는지 검토
참고 사이트