그림자료는 모두 제가 직접 만든것으로 퍼가셔도 상관 없습니다. 틀린 정보가 있다면 댓글로 남겨주세용..
결합도와 응집도의 전체적인 구조
사진으로 보면 이런 구조인데, 설명을 듣고 이미지 자료를 봐도 결합도랑 응집도의 차이에 대해서 이해가 안될 수 있다.
그냥 요약해서 생각하면
결합도는 모듈간 상호의존성으로, 내가 나의 모듈로 A를 실행할 수 있는지 아니면 연관 모듈까지 이해해야 실행할 수 있는지를 나타내는 것이고,
응집도는 모듈 내부에서 자기들끼리 얼마나 잘 사용되는가로 끈끈하게 이어져있어서 모두 사용이 되고 하나의 기능을 담당하고 있는지 아닌지로 응집도를 나타내는 것이다.
결합도
결합도는 모듈과 모듈 사이의 관계에서 관련 정도를 나타낸다.
모듈 간에는 관련이 적을수록 상호 의존성이 줄어 모듈의 독립성이 높아지고, 독립성이 높으면 모듈 간에 영향이 적어 좋은 설계가 된다.
모듈 간에 상호 연관성이 없으면 좋지만, 만일 연관성이 있더라도 영향을 적게 받으려면 제어보다는 매개변수를 사용한 데이터만의 상호 교류가 바람직하다.
- 데이터 결합
- 모듈간의 인터페이스로 전달되는 파라미터를 통해서만 상호 작용이 일어나는 경우
- 스탬프 결합
- 모듈간의 인터페이스로 배열, 레코드, 구조체 등을 매개변수로 사용하는 모듈
- 제어 결합
- 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하는 제어 요소를 전달하는 경우
- C에서는 이 제어 플래그로 switch, tag, flag 등을 사용한다.
- 외부 결합
- 어떤 모듈이 외부에 있는 다른 모듈의 데이터를 참조하는 경우(데이터, 통신 프로토콜 등)
- 공통 결합
- 여러개의 모듈이 하나의 공통 데이터 영역을 사용하는 경우
- 내용 결합
- 어떤 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우
응집도
응집도는 모듈 내부에 존재하는 구성 요소들 사이의 밀접한 정도를 나타낸다.
즉 하나의 모듈 안에서 구성 요소들 간에 똘똘 뭉쳐 있는 정도로 평가한다. 응집도가 높을수록 구성 요소들이 꼭 필요한 것들로만 모여 있고, 응집도가 낮을수록 서로 관련성이 적은 요소들이 모여 있다. 응집도가 가장 높은 것은 모듈 하나가 단일 기능으로 구성된 경우이다. 반대로 응집도가 가장 낮은 것은 기능들이 필요에 의해 모듈 하나에 존재하는 것이 아니라 우연에 의해 함께 묶이게 되는 경우이다.
- 우연적 응집
- 모듈 내부의 각 구성요소들이 연관이 없을 경우
- 논리적 응집
- 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
- 시간적 응집
- 연관된 기능이라기 보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우
- 절차적 응집
- 모듈이 다수 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우
- 교환적 응집
- 동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동들이 모여있을 경우
- 순차적 응집
- 모듈 내에서 한 활동으로부터 나온 출력 값을 다른 활동이 사용할 경우
- 기능적 응집
- 모듈 내부의 모든 기능이 단일 목적을 위해 수행되는 경우
오늘의 회고
결합도, 응집도는 이론적으로는 알고있었지만 실제로 코드에 적용시키려는 노력은 많이 안해본 것 같다.
왜냐면 돌아가기만 하면 되지않을까.. 하는 그런 마음에 어떻게든 썼는데 오늘 스파르타 튜터님 특강에서 직접 리팩토링하는 과정을 거치면서 이렇게 결합도를 낮추는거구나 알게됐다.
물론 내가 그 경지까지 이르기엔 아직 멀었지만 어떻게 해야하는건지 감은 잡은 것 같다.
오늘은 정말 유용한 강의였다고 생각한다!! 물론 안유용했던적은 없지만.. 바로 적용시킬 수 있을만큼 번쩍 그런 생각을 들게하는 강의... ㅎㅎ
오늘도 열공했습니다.. 이번주 팀프로젝트도 성공적으로 끝내길!!
'Record > TIL' 카테고리의 다른 글
[Unity] Unity Toggle 사용하기 (0) | 2024.05.20 |
---|---|
[Unity] 유니티 Json으로 로그인 시스템 구현하기(읽고 쓰기가능한 경로) (2) | 2024.05.17 |
[Unity] 탑다운뷰 게임 개인프로젝트 마무리 (2) | 2024.05.14 |
[Unity] 스크롤뷰 사용해서 참석인원 불러오기 (1) | 2024.05.13 |
[Unity] 애니메이션 활용 (내가 만든 캐릭터로 게임 만들기) (2) | 2024.05.10 |