응집도? 결합도? 의존성?

하윤철·2024년 7월 12일

개발을 하다보면 이러한 단어들을 들어보았을 것이다.

다 비슷한 느낌인거 같은데 무슨 차이가 있길래 구분해서 부르는 걸까?

응집도

응집도는 모듈(클래스, 함수, 메서드 등) 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.

즉, 서로 관련된 기능들만 모여있다면 응집도가 높다고 볼 수 있다.

예를들면

User class 에는 user 정보관리만 하는 기능이 있다? → 응집도 높음

Utility class에는 DB연결, 파일 읽기 등등 잡다한 기능들 있다 → 응집도 낮음

응집도가 높으면 뭐가 좋을까?

  • 변경 대상과 범위가 명확해지는 장점이 있어서 코드를 수정하기 쉬워진다.

결합도

하나의 모듈이 다른 모듈에 얼마나 의존하고 있는지를 나타낸다.
예시를 들면, 결합도가 높다면 다리가 고장나도 몸통까지 바꿔야 한다는 소리다.

그림에서와 같이 B모델은 여러 모듈과 연결이 되어 있기에, B모듈을 수정하면 다른 여러 모델도 수정이 되어야 할 수도 있다.

결합도가 낮으면 뭐가 좋을까?

결합도가 낮은 것을 "느슨하게 연결되었다" 라고 말하기도 한다.

  • 유지 보수성이 향상된다.
  • 특정 모듈에 문제가 생겨도 다른 모듈에는 영향을 끼치지 않는다.

의존성

하나의 모듈이 다른 모듈의 기능을 필요로 한다는 것을 의미한다.
즉 특정 모듈이 동작하려면 다른 모듈이 꼭 요하다는 것을 말한다.

결론

한 줄로 요약하면
["낮은 결합도와 높은 응집도"를 가진 코드를 개발하자.]

최근에는 결합도들을 낮추기 위해 MSA 아키텍처를 많이 도입하고 있을 정도로 결합도가 높은 것은 좋지않다. 고로 최대한 모듈들을 독립적으로 설계하고, 관련 기능들을 모아놓아 응집도를 높이도록 하자.

profile
선순환을 만드는 개발자

0개의 댓글