본문 바로가기
Category/정보처리기사

응집도(Cohesion)란?

by Corinee 2024. 10. 13.
728x90
반응형

응집도(Cohesion)는 소프트웨어 모듈이 얼마나 관련된 기능을 하나로 묶고 있는지를 나타내는 개념입니다. 즉, 모듈 내부 요소들 간의 연관성을 의미합니다. 응집도가 높을수록 모듈은 특정한 기능을 잘 정의하고, 그 기능을 수행하는 데 필요한 요소들만 포함합니다. 반대로, 응집도가 낮으면 모듈 내부 요소들이 다양한 기능을 수행하며 서로 관련성이 낮아지게 됩니다.

응집도는 소프트웨어의 유지보수성, 재사용성, 가독성 등에 중요한 영향을 미치며, 높은 응집도를 유지하는 것이 소프트웨어 품질을 높이는 데 중요합니다.

응집도의 종류 (낮은 응집도 → 높은 응집도)

응집도는 낮은 수준에서 높은 수준으로 나누어지며, 높은 응집도가 더 바람직한 소프트웨어 설계의 목표입니다. 다음은 응집도의 수준을 낮은 응집도부터 높은 응집도 순으로 설명합니다:

  1. 연적 응집도 (Coincidental Cohesion):
    • 가장 낮은 응집도로, 모듈 내부의 요소들이 아무 연관 없이 우연히 모여있는 상태입니다.
    • 서로 관련 없는 기능들이 한 모듈에 포함되어 있어서 모듈의 목적이 불명확해집니다.
    • 예: 여러 기능이 섞여 있는 하나의 큰 메서드.
  2. 리적 응집도 (Logical Cohesion):
    • 모듈 내부의 요소들이 논리적으로 비슷한 성격을 가지는 작업들을 수행하지만, 실제로는 서로 다른 작업을 할 수 있습니다.
    • 예: 입력 장치에 따라 다른 동작을 수행하는 하나의 메서드.
  3. 간적 응집도 (Temporal Cohesion):
    • 모듈이 특정 시간에 관련된 작업들을 묶어 놓은 상태입니다. 프로그램 초기화나 종료 시에 여러 작업을 처리하는 모듈이 해당됩니다.
    • 예: 시스템 초기화 시 여러 설정을 한꺼번에 수행하는 코드.
  4. 차적 응집도 (Procedural Cohesion):
    • 모듈 내의 요소들이 특정 절차를 따르는 작업을 수행하는 경우입니다. 연관된 작업을 순차적으로 처리하지만, 그 작업들은 서로 강한 연관성을 가지지 않을 수 있습니다.
    • 예: 파일을 읽고 데이터를 처리하는 일련의 작업.
  5. 환적 응집도 (Communicational Cohesion):
    • 모듈이 동일한 입력 데이터를 사용하거나 동일한 출력 데이터를 생성하는 작업들로 구성된 상태입니다. 즉, 하나의 데이터 집합을 처리하는 여러 작업들이 모듈에 포함됩니다.
    • 예: 동일한 데이터베이스 파일을 처리하는 여러 함수.
  6. 차적 응집도 (Sequential Cohesion):
    • 모듈 내의 하나의 작업이 다른 작업의 출력을 입력으로 사용하는 경우입니다. 각 기능이 서로 의존하며 연쇄적으로 연결됩니다.
    • 예: 데이터 처리 파이프라인에서, 데이터를 읽고 변환한 후 출력하는 작업.
  7. 능적 응집도 (Functional Cohesion):
    • 가장 높은 응집도로, 모듈이 하나의 명확한 기능을 수행하는 상태입니다. 모듈 내의 모든 요소가 이 기능을 수행하는 데 필요하며, 다른 기능은 포함되지 않습니다.
    • 예: 파일을 저장하는 하나의 함수는 오직 파일 저장 작업만을 수행함.

응집도가 중요한 이유

  • 유지보수성: 응집도가 높은 모듈은 특정한 기능만 수행하므로, 그 모듈을 수정하거나 유지보수할 때 다른 모듈에 미치는 영향을 최소화할 수 있습니다.
  • 재사용성: 높은 응집도를 가진 모듈은 잘 정의된 기능을 가지고 있기 때문에 다른 곳에서 재사용하기 쉽습니다.
  • 가독성: 응집도가 높은 코드는 목적이 명확하고 이해하기 쉬워, 개발자들이 코드를 빠르게 이해할 수 있습니다.
  • 테스트 용이성: 명확한 기능을 수행하는 모듈은 테스트하기 쉬우며, 각각의 모듈이 독립적으로 테스트될 수 있습니다.

응집도와 결합도

응집도모듈 내부의 요소들 간의 연관성을 나타내는 반면, 결합도(Coupling)모듈 간의 상호 의존성을 나타냅니다. 이상적인 소프트웨어 설계에서는 응집도는 높고 결합도는 낮아야 합니다. 즉, 모듈 내부에서는 요소들이 긴밀하게 관련되어 있어야 하지만, 모듈 간에는 서로 독립적이고 의존성이 적어야 합니다.

응집도를 높이는 방법

  1. 단일 책임 원칙(SRP): 모듈은 하나의 책임만 가지도록 설계합니다.
  2. 모듈 분리: 서로 관련성이 낮은 기능은 다른 모듈로 분리합니다.
  3. 함수/클래스의 명확한 역할 정의: 함수나 클래스가 수행하는 작업을 명확하게 정의하고, 그에 맞게 설계합니다.
  4. 리팩토링: 코드를 지속적으로 개선하고, 불필요한 기능을 분리하여 모듈을 재정비합니다.

요약

응집도는 모듈 내부의 요소들이 얼마나 긴밀하게 연관되어 있는지를 나타내며, 높은 응집도를 유지하는 것이 좋은 소프트웨어 설계를 만드는 데 중요한 요소입니다. 높은 응집도는 코드의 유지보수성, 재사용성, 가독성을 높이고 시스템의 안정성을 향상시킵니다.