결합도
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
결합도는 소프트웨어 모듈 간의 상호 의존성을 나타내는 개념으로, 높고 낮음으로 구분된다. 결합도 유형은 변경, 내용, 공통, 외부, 제어, 스탬프, 자료, 메시지 결합도 등이 있으며, 객체지향 프로그래밍에서는 서브클래스 결합과 임시적 결합도 고려한다. 낮은 결합도는 모듈 간의 독립성을 높여 코드 재사용과 유지보수를 용이하게 하지만, 높은 결합도는 파급 효과, 모듈 조립의 어려움, 코드 재사용 및 테스트의 어려움, 성능 저하 등의 문제를 야기한다. 결합도는 다양한 지표를 통해 측정될 수 있으며, 소프트웨어 품질을 평가하는 데 사용된다.
결합도는 모듈 간의 상호 의존 정도를 나타내는 척도이다. 결합도는 "낮음"(또는 "느슨한") 또는 "높음"(또는 "긴밀한")으로 표현할 수 있다. 일반적으로 낮은 결합도는 좋은 설계이며, 유지보수성과 재사용성을 높인다.
2. 결합도의 종류
결합도의 유형은 높은 것부터 낮은 것 순서대로 다음과 같다.결합도 유형 설명 내용 결합도 (Content Coupling) 한 모듈이 다른 모듈의 내부 동작을 수정하거나 의존하는 경우이다. 예를 들어, 다른 모듈의 로컬 데이터에 직접 접근하는 경우가 해당된다.[1] 공통 결합도 (Common Coupling) 두 모듈이 같은 전역 데이터를 공유하는 경우이다. 전역 변수를 변경하면 이를 사용하는 모든 모듈에 영향을 미친다.[1] 외부 결합도 (External Coupling) 두 모듈이 외부에서 도입된 데이터 형식, 통신 프로토콜, 또는 디바이스 인터페이스를 공유하는 경우이다.[1] 제어 결합도 (Control Coupling) 한 모듈이 다른 모듈에게 무엇을 해야 하는지에 대한 정보를 전달하여 다른 모듈의 흐름을 제어하는 경우이다.[1] 스탬프 결합도 (Stamp Coupling) 모듈들이 자료 구조를 공유하고, 각 모듈은 그 자료 구조의 서로 다른 일부만을 사용하는 경우이다.[1] 자료 결합도 (Data Coupling) 모듈들이 매개변수 등을 통해 데이터를 공유하며, 각 데이터는 기본적인 형태여야 한다.[1] 메시지 결합도 (Message Coupling) 가장 낮은 결합도 유형이다. 모듈 간의 통신은 매개변수나 메시지 패싱을 통해 이루어진다.[1] 결합도 없음 (No Coupling) 모듈이 서로 통신하지 않는 경우이다.[1]
소프트웨어 품질 척도인 결합도와 응집도는 1960년대 후반 래리 콘스탄틴이 "유지보수 및 수정 비용"을 줄이는 "좋은" 프로그래밍 관행의 특성을 기반으로 하는 구조적 설계의 일부로 발명하였다. 응집도와 결합도를 포함한 구조적 설계는 1974년 논문 ''스티븐스, 마이어스 & 콘스탄틴''과 1979년 도서 ''요던 & 콘스탄틴''에 발표되었으며, 후자는 이후 표준 용어가 되었다.
2. 1. 절차적 프로그래밍
절차적 프로그래밍에서 모듈은 서브 루틴(예: 하나의 이름을 가지는 문장들)을 가리킨다.
결합도는 "낮음"(또는 "느슨한" 또는 "약한") 또는 "높음"(또는 "긴밀한" 또는 "강한")일 수 있다. 결합도가 높은 것부터 낮은 것 순으로, 몇 가지 결합도 유형은 다음과 같다.2. 2. 객체지향 프로그래밍
thumb
결합도는 "낮음"(또는 "느슨한" 또는 "약한") 또는 "높음"(또는 "긴밀한" 또는 "강한")일 수 있다. 결합도가 높은 것부터 낮은 것 순으로, 몇 가지 결합도 유형은 다음과 같다.
최근 연구에서는 실제로 사용되는 다양한 모듈화 원칙의 지표로서 다양한 결합 개념이 조사되고 사용되었다.3. 결합도와 응집도
결합도는 "낮아질"(또는 "약해질") 수도 "높아질"(또는 "강해질") 수도 있다. 높은 것부터 낮은 것의 순서로 결합도를 나열하면 다음과 같다.
소프트웨어 품질 척도인 결합도와 응집도는 1960년대 후반 래리 콘스탄틴이 "유지보수 및 수정 비용"을 줄이는 "좋은" 프로그래밍 관행의 특성을 기반으로 하는 구조적 설계의 일부로 발명했다. 응집도와 결합도를 포함한 구조적 설계는 논문 ''스티븐스, 마이어스 & 콘스탄틴'' (1974)와 도서 ''요던 & 콘스탄틴'' (1979)에 발표되었으며, 후자는 이후 표준 용어가 되었다.
결합도와 응집도는 매우 빈번하게 함께 사용되는 용어이다. 결합도는 모듈 간의 상호 의존성을 의미하며, 응집도는 단일 모듈 내에서 기능들이 얼마나 관련되어 있는지를 나타낸다. 낮은 응집도는 주어진 모듈이 서로 관련성이 낮은 작업을 수행함을 의미하며, 이로 인해 모듈이 커짐에 따라 문제가 발생할 수 있다.
컴퓨터 프로그래머는 기존의 소프트웨어 제품에 없는 기능을 추가하거나, 지원하지 않는 데이터에 대응하는 상황이 발생한다. 이 때, 모든 기존 소프트웨어 제품의 내부(더 구체적으로는 소스 코드)의 각 기능, 각 데이터에 대해, 어떤 데이터가 어디에서 사용되고, 어디에서 사용되지 않는지 확실하게 판단할 수 있도록 정리, 분할이 잘 되어 있는 상태를 결합도가 '''낮다'''고 표현한다. 결합도는 낮을수록 좋다. 반대로 결합도가 높다는 것은, 예를 들어 하나의 데이터 변경이 부품의 관련성을 따라 파급되어 (멀리 떨어진, 라고 느껴지는) 의도하지 않은 부분에서 문제점을 야기하는 것을 의미한다. 하나의 변경에 대해 광범위하고 여러 산재된 부분의 부품 동작을 수정해야 할 필요가 생길 수 있다.
4. 낮은 결합도의 중요성
낮은 결합도는 하나의 모듈이 단순하고 안정적인 인터페이스를 통해 다른 모듈과 상호 작용하며 다른 모듈의 내부 구현에 대해 걱정할 필요가 없는 관계를 의미한다([정보 은닉] 참조).
CORBA 또는 COM과 같은 시스템을 사용하면 객체가 다른 객체의 구현에 대해 아무것도 알 필요 없이 서로 통신할 수 있다. 이 두 시스템은 심지어 다른 언어로 작성된 객체와도 통신할 수 있게 해준다.
컴퓨터 프로그래머는 기존의 소프트웨어 제품에 없는 기능을 추가하거나, 지원하지 않는 데이터에 대응하는 상황이 발생한다.[1] 이때, 모든 기존 소프트웨어 제품의 내부(더 구체적으로는 소스 코드)의 각 기능, 각 데이터에 대해, 어떤 데이터가 어디에서 사용되고, 어디에서 사용되지 않는지 확실하게 판단할 수 있도록 정리, 분할이 잘 되어 있는 상태를 결합도가 '''낮다'''고 표현한다.[1] 결합도는 낮을수록 좋다.[1] 반대로 결합도가 높다는 것은, 예를 들어 하나의 데이터 변경이 부품의 관련성을 따라 파급되어 (멀리 떨어진, 라고 느껴지는) 의도하지 않은 부분에서 문제점을 야기하는 것을 의미한다.[1] 하나의 변경에 대해 광범위하고 여러 산재된 부분의 부품 동작을 수정해야 할 필요가 생길 수 있다.[1]
5. 높은 결합도의 문제점
높은 결합도는 시스템에 다음과 같은 문제점을 야기한다.
- 한 모듈을 변경하면 다른 모듈에도 영향을 미쳐 연쇄적인 수정이 필요하게 된다.[1]
- 모듈 간 의존성이 높아져 모듈을 조립하는 데 더 많은 노력과 시간이 소요된다.[1]
- 특정 모듈은 종속된 모듈을 포함해야 하므로 코드 재사용 및 테스트가 어려워진다.[1]
예를 들어, 한 모듈의 변경이 다른 모듈에 파급 효과를 일으켜 의도치 않은 문제를 야기할 수 있다.[1] 이는 소프트웨어의 유지보수를 어렵게 만들고, 시스템의 안정성을 저해하는 요인이 된다.[1]
6. 결합도 측정
소프트웨어 시스템의 런타임 평가를 제공하기 위해 결합도를 정의하고 측정한다. 동적 바인딩이나 상속을 많이 사용하는 경우 정적 결합도 메트릭은 정밀도를 잃는다는 주장이 있었다. 이 문제를 해결하기 위해 동적 결합도 측정이 고려되었다.
이러한 종류의 결합도 측정 방식은 잠재 의미 분석(LSI)과 같은 기술을 사용하여, 주석 및 식별자와 같은 소프트웨어 요소 간의 개념적 유사성을 고려한다.
변경 결합도 (논리적 결합도, 진화적 결합도, 변경 결합도) 분석은 소프트웨어 시스템의 릴리스 이력을 활용하여 모듈 또는 클래스 간의 변경 패턴을 찾는다. 예를 들어, 함께 변경될 가능성이 있는 엔티티 또는 변경 시퀀스(클래스 A의 변경은 항상 클래스 B의 변경을 따름)를 찾는다.
소프트웨어 공학에서의 결합도는 이 개념과 관련된 일련의 지표를 설명한다.
데이터 및 제어 흐름 결합의 경우:
용어 | 설명 |
---|---|
di | 입력 데이터 매개변수의 수 |
ci | 입력 제어 매개변수의 수 |
do | 출력 데이터 매개변수의 수 |
co | 출력 제어 매개변수의 수 |
전역 결합의 경우:
용어 | 설명 |
---|---|
gd | 데이터로 사용되는 전역 변수의 수 |
gc | 제어로 사용되는 전역 변수의 수 |
환경 결합의 경우:
용어 | 설명 |
---|---|
w | 호출되는 모듈의 수 (팬아웃) |
r | 고려 중인 모듈을 호출하는 모듈의 수 (팬인) |
:
`Coupling(C)`는 모듈이 더 결합될수록 값을 크게 만든다. 이 값은 대략 0.67 (낮은 결합도)에서 1.0 (높은 결합도)까지의 범위를 갖는다.
예를 들어, 모듈에 단일 입력 및 출력 데이터 매개변수만 있는 경우:
:
모듈에 5개의 입력 및 출력 데이터 매개변수, 동일한 수의 제어 매개변수가 있고, 10개의 전역 데이터 항목에 액세스하며, 팬인이 3이고 팬아웃이 4인 경우:
:
참조
[1]
서적
Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
Addison-Wesley Professional
[2]
서적
Fundamentals of Software Architecture: An Engineering Approach
O'Reilly Media
[3]
논문
Structured Design
IBM Systems Journal
1974
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com