응집도
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
응집도는 객체 지향 프로그래밍에서 클래스 내 메서드들이 얼마나 밀접하게 연관되어 있는지를 나타내는 개념이다. 높은 응집도는 모듈의 가독성과 재사용성을 높이고, 유지 보수를 용이하게 하지만, 낮은 응집도는 모듈의 이해와 유지 보수를 어렵게 만든다. 응집도는 우연적, 논리적, 시간적, 절차적, 통신적/정보적, 순차적, 기능적 응집도 등 여러 유형으로 분류되며, 기능적 응집도가 가장 이상적인 형태로 여겨진다. 높은 응집도를 갖는 설계는 모듈 복잡성을 줄이고 재사용성을 높이는 장점이 있다.
더 읽어볼만한 페이지
- 소프트웨어 메트릭 - 코드 커버리지
코드 커버리지는 테스트 스위트에 의해 실행된 코드의 비율을 측정하는 기준으로, 최종 제품 인증에 필요한 테스트 수준을 결정하며, 다양한 커버리지 기준 중 안전 필수 애플리케이션에서는 수정 조건/결정 커버리지(MC/DC)와 같은 고급 기준이 사용된다. - 소프트웨어 메트릭 - 결합도
결합도는 소프트웨어 설계에서 모듈 간 상호 의존성을 나타내는 척도로, 유지보수 및 수정 비용을 줄이기 위해 낮은 결합도를 지향하는 것이 중요하며, 내용 결합, 공통 결합, 외부 결합 등 다양한 유형으로 분류된다. - 프로그래밍 원칙 - 블랙박스
블랙 박스는 자극 입력과 출력 반응의 관점에서 시스템을 추상화하여 외부적으로 관찰하는 이론으로, 전자 회로 이론, 사이버네틱스, 시스템 이론 등 다양한 분야에서 활용되며 예측 모델 구축 및 유효성 검증, 그리고 항공기 비행 기록 장치나 함수 교육 도구 등 실생활에도 응용된다. - 프로그래밍 원칙 - 정보 은닉
정보 은닉은 소프트웨어 설계에서 모듈 내부 구현을 숨기고 정의된 인터페이스를 통해서만 상호 작용하도록 하여 모듈 독립성을 높이고 시스템 복잡성을 관리하는 데 중요한 기법으로, 객체 지향 프로그래밍의 캡슐화와 관련된다. - 소프트웨어 구조 - Ajax
Ajax는 웹 페이지 전체를 새로고침하지 않고 비동기적으로 서버와 통신하여 웹 애플리케이션의 일부를 업데이트하는 웹 개발 기술로, XMLHttpRequest 객체의 등장으로 가능해졌으며 HTML, CSS, DOM, JavaScript, JSON 등의 기술을 통합하여 동적인 사용자 인터페이스를 구현한다. - 소프트웨어 구조 - 멀티테넌시
멀티테넌시는 단일 애플리케이션 인스턴스로 여러 고객에게 서비스를 제공하여 SaaS 및 클라우드 환경에서 비용과 관리 효율성을 높이고 데이터 활용 가치를 창출하는 소프트웨어 아키텍처 방식이다.
응집도 | |
---|---|
컴퓨터 과학에서의 응집도 | |
정의 | 응집도는 모듈 내의 요소들이 서로 얼마나 관련되어 있는지를 나타내는 척도이다. |
목표 | 높은 응집도는 소프트웨어 디자인의 바람직한 특성이다. |
장점 | 모듈의 이해도 향상 유지보수 용이성 증가 재사용성 향상 |
응집도의 종류 | |
가장 높은 응집도 | 기능적 응집도 (Functional Cohesion) |
설명 | 모듈 내의 모든 요소가 단일한 목적을 수행하는 데 기여한다. |
중간 응집도 | 순차적 응집도 (Sequential Cohesion) 통신적 응집도 (Communicational Cohesion) 절차적 응집도 (Procedural Cohesion) |
가장 낮은 응집도 | 논리적 응집도 (Logical Cohesion) 시간적 응집도 (Temporal Cohesion) 우연적 응집도 (Coincidental Cohesion) |
역사 | |
개발자 | Wayne Stevens) 글렌포드 마이어스(Glenford Myers) Larry Constantine |
저서 | Yourdon, Edward; Constantine, Larry L. (1979). Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. New York: Yourdon Press. ISBN 0-13-854471-9. |
2. 응집도의 개념
객체 지향 프로그래밍에서 클래스는 해당 클래스를 지원하는 메서드가 여러 측면에서 유사할 경우 높은 응집도를 갖는다고 한다. 응집도가 높은 시스템에서는 코드 가독성과 재사용성이 증가하는 반면, 복잡성은 관리가 용이하게 유지된다.
응집도는 다음과 같은 경우에 증가한다.
- 클래스에 내장된 기능이 해당 메서드를 통해 접근되며, 많은 공통점을 가진다.
- 메서드는 거친 입자 또는 관련 없는 데이터 집합을 ''피함으로써'' 소수의 관련 활동을 수행한다.
- 관련 메서드는 동일한 소스 파일에 있거나 다른 방식으로 함께 그룹화된다. (예: 별도의 파일에 있지만 동일한 하위 디렉토리/폴더)
높은 응집도(또는 "강한 응집도")의 장점은 다음과 같다.
- 모듈 복잡성 감소 (더 적은 연산).
- 시스템 유지 보수성 증가 (논리적 변경이 더 적은 모듈에 영향을 미치고 한 모듈의 변경이 다른 모듈에서 더 적은 변경을 요구함).
- 모듈 재사용성 증가 (애플리케이션 개발자가 모듈이 제공하는 응집력 있는 연산 집합 중에서 필요한 소프트웨어 구성 요소를 더 쉽게 찾을 수 있음).
원칙적으로 모듈은 단일 원자 요소(예: 단일 함수)로 구성되어 완벽한 응집성을 가질 수 있지만, 실제로는 복잡한 작업은 단일 간단한 요소로 표현할 수 없다. 따라서 단일 요소 모듈은 작업을 수행하기에는 너무 복잡하거나 너무 좁아서 다른 모듈에 긴밀하게 결합된 요소를 갖는다. 따라서 응집성은 단위 복잡성과 결합 모두와 균형을 이룬다.
응집도는 특정 코드가 해당 클래스의 책임 분담에 얼마나 집중되어 있는지를 나타내는 정성적인 척도이다. 객체 지향 프로그래밍에서는 클래스의 응집도를 높이도록 해당 클래스의 책임 범위를 설정하는 것이 유용하다. 응집도가 높은 시스템에서는 코드의 가독성과 재사용성이 증가하고, 복잡성이 관리 가능한 정도로 억제된다.
응집도는 다음과 같은 경우에 낮아진다.
- 클래스의 책임 범위(메서드 그룹)에 공통점이 거의 없다.
- 메서드가 다양한 일을 수행하며, 종종 입도가 큰 데이터나 전혀 관련 없는 데이터 그룹을 다룬다.
응집도가 낮을(약할) 경우의 단점은 다음과 같다.
- 모듈 그룹을 이해하기 어려워진다.
- 시스템 유지보수가 어려워진다. (논리적 수정이 여러 모듈에 걸쳐 영향을 미칠 가능성이 높음)
- 모듈 재사용이 어려워진다. (응집도가 낮은 모듈이 제공하는 API는 일관성이 없는 경우가 많음)
3. 응집도의 중요성
객체 지향 프로그래밍에서 클래스를 지원하는 메서드가 여러 측면에서 유사할 경우 높은 응집도를 갖는다고 한다. 응집도가 높은 시스템에서는 코드 가독성과 재사용성이 증가하는 반면, 복잡성은 관리가 용이하게 유지된다.
높은 응집도(또는 "강한 응집도")의 장점은 다음과 같다.
- 더 적은 연산으로 모듈 복잡성 감소.
- 논리적 변경이 더 적은 모듈에 영향을 미치고 한 모듈의 변경이 다른 모듈에서 더 적은 변경을 요구하므로 시스템 유지 보수성 증가.
- 애플리케이션 개발자가 모듈이 제공하는 응집력 있는 연산 집합 중에서 필요한 소프트웨어 구성 요소를 더 쉽게 찾을 수 있으므로 모듈 재사용성 증가.
응집도가 낮은 경우(또는 "약한 응집도")의 단점은 다음과 같다.
- 모듈 그룹을 이해하기 어려워진다.
- 시스템 유지보수가 어려워진다. 어떤 논리적 수정이 여러 모듈에 걸쳐 영향을 미칠 가능성이 높아지기 때문이다.
- 모듈 재사용이 어려워진다. 응집도가 낮은 모듈이 제공하는 API는 일관성이 없는 경우가 많기 때문이다.
응집도는 다음과 같은 경우에 낮아진다.
- 클래스의 책임 범위(메서드 그룹)에 공통점이 거의 없다.
- 메서드가 다양한 일을 수행하며, 종종 입도가 큰 데이터나 전혀 관련 없는 데이터 그룹을 다룬다.
4. 응집도의 유형
응집도는 모듈 내의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타내는 척도이다. 래리 콘스탄틴, 에드워드 요던, 스티브 맥코넬 등의 연구에 따르면, 응집도는 최악의 경우부터 최상의 경우까지 다양한 유형으로 분류될 수 있다.
순서 | 유형 | 설명 | 예시 |
---|---|---|---|
1 | 우연적 응집도 (Coincidental Cohesion영어) | 모듈의 각 부분이 임의로 그룹화되어 있고, 서로 특별한 관련성이 없다. | "유틸리티" 클래스 |
2 | 논리적 응집도 (Logical Cohesion영어) | 모듈의 각 부분이 본질적으로는 다르지만 논리적으로 같은 작업을 수행하기 위해 분류된다. | 모든 마우스 및 키보드 입력 처리 루틴을 그룹화 |
3 | 시간적 응집도 (Temporal Cohesion영어) | 모듈의 각 부분이 프로그램 실행의 특정 시간에 처리된다. | 예외 처리 후 호출되어 열린 파일을 닫고, 오류 로그를 생성하고, 사용자에게 알리는 함수 |
4 | 절차적 응집도 (Procedural Cohesion영어) | 모듈의 각 부분이 항상 특정 실행 시퀀스를 따른다. | 파일 권한을 확인한 다음 파일을 여는 함수 |
5 | 통신적/정보적 응집도 (Communicational/Informational Cohesion영어) | 모듈의 각 부분이 동일한 데이터를 처리한다. | 동일한 정보 레코드를 처리하는 모듈 |
6 | 순차적 응집도 (Sequential Cohesion영어) | 한 부분의 출력이 다른 부분의 입력으로 사용되는, 조립 라인과 같은 형태이다. | 파일에서 데이터를 읽고 데이터를 처리하는 함수 |
7 | 기능적 응집도 (Functional Cohesion영어) | 모듈의 각 부분이 모듈의 단일하고 잘 정의된 작업에 모두 기여한다. | XML 문자열의 어휘 분석 |
위의 표에서 우연적 응집도와 논리적 응집도는 낮은 품질의 응집도로 간주되며, 기능적 응집도가 가장 이상적인 응집도로 평가받는다. 그러나 현실적으로는 항상 기능적 응집도를 달성할 수 있는 것은 아니며, 상황에 따라서는 통신적 응집도가 최선인 경우도 있다.
4. 1. 기능적 응집도 (Functional Cohesion)
모듈의 모든 요소가 단일하고 잘 정의된 작업을 수행하기 위해 협력하는 경우이다. 가장 이상적인 응집도 유형으로 간주된다. 예시는 다음과 같다.- XML 문자열의 어휘 분석을 수행하는 모듈
- 각도의 사인 값을 계산하는 모듈
기능적 응집도(Functional Cohesion영어)는 모듈의 모든 부분이 모듈의 단일하고 잘 정의된 작업에 기여하기 때문에 그룹화될 때 발생한다.
4. 2. 순차적 응집도 (Sequential Cohesion)
순차적 응집도는 모듈의 한 부분의 출력이 다른 부분의 입력으로 사용되는 경우이다. 이는 마치 조립 라인과 같다고 볼 수 있다. 예를 들어, 파일에서 데이터를 읽고 그 데이터를 처리하는 모듈이 순차적 응집도에 해당한다.4. 3. 통신적 응집도 (Communicational Cohesion)
모듈의 요소들이 동일한 데이터를 처리하기 때문에 그룹화될 때 통신적 응집도가 발생한다. 예를 들어, 동일한 정보 레코드를 처리하는 모듈이 이에 해당한다.4. 4. 절차적 응집도 (Procedural Cohesion)
절차적 응집도는 모듈의 일부가 특정 실행 순서를 따르기 때문에 그룹화되는 경우이다. 예를 들어, 파일 권한을 확인한 다음 파일을 여는 함수가 이에 해당한다.4. 5. 시간적 응집도 (Temporal Cohesion)
시간적 응집도는 모듈의 일부가 처리되는 시간에 따라 그룹화되는 것을 의미한다. 이 경우 모듈의 각 부분들은 프로그램 실행의 특정 시점에 처리된다. 예를 들어, 예외를 잡은 후 호출되어 열린 파일을 닫고, 오류 로그를 생성하고, 사용자에게 알리는 함수가 이에 해당한다. 이러한 요소들이 특정 시간에 함께 실행되기 때문에 시간적 응집도를 가진다고 할 수 있다.4. 6. 논리적 응집도 (Logical Cohesion)
모듈의 요소들이 논리적으로는 관련되어 있지만, 실제로는 서로 다른 작업을 수행하는 경우를 논리적 응집도라고 한다. 예를 들어, 모든 마우스 및 키보드 입력 처리 루틴을 하나의 모듈로 그룹화하거나, 모델-뷰-컨트롤러(MVC 패턴)에서 모든 모델, 뷰, 컨트롤러를 별도의 폴더로 묶는 경우가 이에 해당한다.4. 7. 우연적 응집도 (Coincidental Cohesion)
우연적 응집도는 모듈의 요소들이 서로 관련이 없거나 임의로 그룹화된 경우를 말한다. 예를 들어, 여러 유틸리티 함수를 모아놓은 클래스가 이에 해당한다.C 언어 코드 예시 |
---|
모듈 내 각 부분은 특별한 관련성이 없으며, 우연적 응집도(Coincidental Cohesion영어)는 가장 낮은 품질의 응집도로 간주된다.
5. 높은 응집도 설계를 위한 지침
객체 지향 프로그래밍에서 클래스는 해당 클래스를 지원하는 메서드가 여러 측면에서 유사할 경우 높은 응집도를 갖는다고 한다. 응집도가 높은 시스템에서는 코드 가독성과 재사용성이 증가하는 반면, 복잡성은 관리가 용이하게 유지된다.
높은 응집도(또는 "강한 응집도")의 장점은 다음과 같다.
- 더 적은 연산으로 모듈 복잡성 감소.
- 논리적 변경이 더 적은 모듈에 영향을 미치고 한 모듈의 변경이 다른 모듈에서 더 적은 변경을 요구하므로 시스템 유지 보수성 증가.
- 애플리케이션 개발자가 모듈이 제공하는 응집력 있는 연산 집합 중에서 필요한 소프트웨어 구성 요소를 더 쉽게 찾을 수 있으므로 모듈 재사용성 증가.
원칙적으로 모듈은 단일 원자 요소(예: 단일 함수)로 구성되어 완벽한 응집성을 가질 수 있지만, 실제로는 복잡한 작업은 단일 간단한 요소로 표현할 수 없다. 따라서 단일 요소 모듈은 작업을 수행하기에는 너무 복잡하거나 너무 좁아서 다른 모듈에 긴밀하게 결합된 요소를 갖는다. 따라서 응집성은 단위 복잡성과 결합 모두와 균형을 이룬다.
응집도는 다음과 같은 경우에 증가한다.
- 클래스에 내장된 기능이 해당 메서드를 통해 접근되며, 많은 공통점을 가진다.
- 메서드는 거친 입자 또는 관련 없는 데이터 집합을 ''피함으로써'' 소수의 관련 활동을 수행한다.
- 관련 메서드는 동일한 소스 파일에 있거나 다른 방식으로 함께 그룹화된다. (예: 별도의 파일에 있지만 동일한 하위 디렉토리/폴더에 있다.)
6. 응집도와 결합도
객체 지향 프로그래밍에서 클래스는 해당 클래스를 지원하는 메서드가 여러 측면에서 유사할 경우 높은 응집도를 갖는다고 한다. 응집도가 높은 시스템에서는 코드 가독성과 재사용성이 증가하는 반면, 복잡성은 관리가 용이하게 유지된다.
응집도는 다음과 같은 경우에 증가한다.
- 클래스에 내장된 기능이 해당 메서드를 통해 접근되며, 많은 공통점을 가진다.
- 메서드는 거친 입자 또는 관련 없는 데이터 집합을 ''피함으로써'' 소수의 관련 활동을 수행한다.
- 관련 메서드는 동일한 소스 파일에 있거나 다른 방식으로 함께 그룹화된다. (예: 별도의 파일에 있지만 동일한 하위 디렉토리/폴더)
높은 응집도(또는 "강한 응집도")의 장점은 다음과 같다.
- 더 적은 연산으로 모듈 복잡성 감소.
- 논리적 변경이 더 적은 모듈에 영향을 미치고 한 모듈의 변경이 다른 모듈에서 더 적은 변경을 요구하므로 시스템 유지 보수성 증가.
- 애플리케이션 개발자가 모듈이 제공하는 응집력 있는 연산 집합 중에서 필요한 소프트웨어 구성 요소를 더 쉽게 찾을 수 있으므로 모듈 재사용성 증가.
원칙적으로 모듈은 단일 원자 요소(예: 단일 함수)로 구성되어 완벽한 응집성을 가질 수 있지만, 실제로는 복잡한 작업은 단일 간단한 요소로 표현할 수 없다. 따라서 단일 요소 모듈은 작업을 수행하기에는 너무 복잡하거나 너무 좁아서 다른 모듈에 긴밀하게 결합된 요소를 갖는다. 따라서 응집성은 단위 복잡성과 결합 모두와 균형을 이룬다.
응집도는 특정 코드가 해당 클래스의 책임 분담에 얼마나 집중되어 있는지를 나타내는 정성적인 척도이다. 객체 지향 프로그래밍에서는 클래스의 응집도를 높이도록 해당 클래스의 책임 범위를 설정하는 것이 유용하다. 응집도가 높은 시스템에서는 코드의 가독성과 재사용성이 증가하고, 복잡성이 관리 가능한 정도로 억제된다.
응집도는 다음과 같은 경우에 낮아진다.
- 클래스의 책임 범위(메서드 그룹)에 공통점이 거의 없다.
- 메서드가 다양한 일을 수행하며, 종종 입도가 큰 데이터나 전혀 관련 없는 데이터 그룹을 다룬다.
응집도가 낮을(약할) 경우의 단점은 다음과 같다.
- 모듈 그룹을 이해하기 어려워진다.
- 시스템 유지보수가 어려워진다. 어떤 논리적 수정이 여러 모듈에 걸쳐 영향을 미칠 가능성이 높아지기 때문이다.
- 모듈 재사용이 어려워진다. 응집도가 낮은 모듈이 제공하는 API는 일관성이 없는 경우가 많기 때문이다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com