본문 바로가기
Java & Kotlin

객체의 결합도와 응집도

by Jammini 2023. 12. 8.
728x90

목차

  1. 소프트웨어의 모듈 독립성
  1. 결합도 (Coupling)
  1. 응집도 (Cohesion)
  1. 결론

1. 소프트웨어의 모듈 독립성

모듈화는 복잡한 시스템을 더 작고 이해하기 쉬운 부분으로 나누는 과정을 의미한다.

모듈은 소프트웨어를 각 기능별로 나누어진 소스 단위를 말한다. 독립적으로 컴파일 가능한 프로그램 혹은 하나의 함수나 클래스도 모듈이 된다.

보통 좋은 소프트웨어 일수록 모듈의 독립성이 높다고 한다.

좋은 모듈화는 목적에 맞는 기능만으로 모듈을 나누게 되는데, 각각의 모듈은 주어진 기능만을 독립적으로 수행하기 때문에 재사용성이 높고 코드의 이해/수정이 용이하기 때문이다.

예를들어 해당 모듈을 수정하더라도 다른 모듈에 끼치는 영향이 적게 되며, 오류가 발생하더라도 기능 단위로 잘 나뉘어 져 있기 때문에 손쉽게 문제를 발견해 해결할 수 있기도 한다.

이러한 모듈의 독립성은 모듈의 결합도(Coupling) 와 응집도(Cohesion)의 기준 단계 측정한다

결합도는 모듈과 모듈 간의 의존 정도를 의미하고, 응집도는 한 모듈 내의 구성요소들 간의 연관 정도를 의미한다.

결합도와 응집도의 강도 세기에 따라 여러 단계로 나뉘게 되는데 응집도는 강할수록, 결합도는 느슨할 수록 독립성이 높은 모듈로 평가 된다.

2. 결합도 (Coupling)

결합도는 모듈(클래스 파일)간의 상호 의존 정도이다.

결합도가 높다면, 클래스 구조를 변경할 경우 연관된 클래스를 다 변경해야하는 불상사가 발생할 수 있어 유지보수 측면에서 효율적이지 못한다.

객체지향의 관점에서 결합도는 클래스 또는 메서드가 협력에 필요한 적절한 수준의 관계만을 유지하고 있는지를 나타낸다.

즉, 어떤 클래스가 다른 클래스에 대해 너무 자세히 알고 있다면 두 모듈은 높은 결합도를 가지게 되고, 반대로 어떤 클래스가 다른 클래스에 대해 꼭 필요한 지식만 가지고 있다면 두 모듈은 낮은 결합도를 가진다고 말할 수 있는 것이다.

따라서 좋은 소프트웨어는 낮은 결합도(low coupling)를 가지고 있다고 말할 수 있다.

[결합도가 낮은 클래스의 특징]

  • Open Closed Principle의 원칙을 잘 지킨 클래스 (확장에는 열려있고 변경에는 닫혀 있는 클래스)
  • 다형성을 잘 지킨 클래스

3. 응집도 (Cohesion)

응집도는 모듈 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다. 즉, 모듈 내부의 기능이 얼마나 관련성 있게 그룹화되어 있는지를 측정한다.

응집도가 낮다면, 쇼핑몰 프로젝트에서 주문 처리를 담당하는 클래스에서 회원의 정보를 업데이트하는 메서드가 있다면, 이것은 응집도가 낮은 것이다. 회원 정보 업데이트는 회원만 담당하는 클래스에서 따로 분리하여 처리하는것이 옳기 때문이다.

이처럼 응집도가 높은 모듈은 기능을 수정할 때 관련 내용이 하나의 모듈에 모여있으므로 코드를 이해하기도 쉽고, 수정한 후 관련 없는 다른 모듈에겐 영향을 주지 않아 코드의 유지보수에 유리하다.

즉, 한 모듈이 하나의 기능(책임)을 갖고있는 것은 응집도가 높은 것이고, 한 모듈이 여러 기능을 갖고 있는 것은 응집도가 낮은 것이다.

따라서 좋은 소프트웨어는 높은 응집도(high Cohesion)를 가지고 있다고 말할 수 있다.

[응집도가 높은 클래스의 특징]

  • 단일 책임을 가진 클래스 (Single Responsibility Principle)
  • 다른 클래스와 잘 협력하는 클래스

4. 결론

결합도와 응집도는 서로 반대 개념이며, 소프트웨어 설계에서 이 두 가지 원칙을 균형 있게 고려해야 한다.

높은 응집도와 낮은 결합도를 가진 모듈은 코드의 가독성을 향상시키고 유지보수성을 높일 수 있으며, 시스템의 확장성과 재사용성을 향상시킬 수 있다.

참고

반응형