일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AWS
- algorithm
- docker
- Express
- Util
- postman
- ubuntu
- Android
- node.js
- mysql
- python
- Scheduling
- TypeScript
- OS
- Network
- DATABASE
- sequelize
- MongoDB
- macos
- typeorm
- S3
- linux
- React
- HTML
- css
- OOAD
- Kotlin
- mongoose
- wireshark
- Crawling
- Today
- Total
Seongwon Lim
[OOAD] 결합도(Coupling) & 응집도(Cohesion) 본문
서론
소프트웨어 공학에서 모듈을 설계할 때에는 모듈의 독립성을 높은 수준으로 구현하여야 한다.
- 모듈(Module) : 시스템의 독자적인 기능으로 소프트웨어 성능 향상 및 재사용성을 높이기 위해 기능 단위로 분해한 것
- 모듈의 독립성을 높여야 하는 이유는 모듈의 정의와 같이 성능, 재사용성, 수정 용이성 등을 보장하기 위함이다.
또한, 모듈을 설계할 때에는 모듈 간 의존성과 모듈 내부 기능들이 기능적으로 잘 뭉쳐져 있는 지를 확인하며 설계할 필요가 있으며 해당 내용들을 만족하여야 독립성 있는 모듈을 구현할 수 있다.
그래서 이번 글에서는 위에서 언급한 2가지 내용인 모듈 설계 시 필요한 결합도(Coupling), 응집도(Cohesion)의 개념과 종류를 간단하게 살펴보고자 한다.
결합도 (Coupling) 개념
결합도란 모듈이 다른 모듈에 의존하는 정도를 나타내는 것으로, OO 시스템에서 결합도는 낮을수록 좋은 설계를 한 것으로 볼 수 있다.
객체 지향 시스템에서 각 객체들은 그들 간의 상호작용을 통해 요구사항을 충족한다. 그러나 만약 객체 간 결합도(의존도)가 높으면 특정 객체가 변경되었을 때 다른 객체에 영향을 끼치게 된다.
물론, 객체들 사이의 의존성이 완전히 없을 수는 없지만 불필요한 결합을 배제하여 모듈 간 낮은 의존성을 유지함으로써 재사용성을 높일 수 있다. 또한, 모듈 간 의존성을 낮은 수준으로 유지하게 된다면 특정 모듈이 변경되었을 때 해당 모듈과 의존성이 있는 모듈만 수정하면 되기 때문에 유지보수성을 향상시킬 수 있다.
결합도 (Coupling) 종류
결합도 | 종류 | 의미 |
Low Coupling | 자료 결합도 (Data Coupling) | 모듈간의 인터페이스로 전달되는 파라미터(자료 요소)를 통해서만 모듈간의 상호 작용이 일어나는 경우 |
↓ | 스탬프 결합도 (Stamp Coupling) | 모듈간의 인터페이스로 배열이나 오브젝트, 스트럭쳐(자료 구조) 등이 전달되는 경우 |
↓ | 제어 결합도 (Control Coupling) | 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호(DCD, Flag)를 이용하여 통신하는 경우 |
↓ | 외부 결합도 (External Coupling) | 특정 모듈에서 선언한 변수를 외부의 다른 모듈에서 참조하는 경우 |
↓ | 공유 결합도 (Common Coupling) | 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고, 전역 변수를 갱신하는 식으로 상호작용 하는 경우 |
High Coupling | 내용 결합도 (Content Coupling) | 특정 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우 |
응집도 (Cohesion) 개념
응집도는 모듈 내부의 기능적인 응집 정도를 의미하며 쉽게 설명하면 특정 모듈들이 독립적인 기능으로 구성되어 있는지를 나타내는 것이다. 모듈은 독립성을 보장하는 것이 목표이므로 응집도가 강할수록 독립적인 모듈을 설계했다고 할 수 있다.
응집도가 높으면 특정 모듈은 자신이 부여 받은 역할을 충족시키기 위해 다른 모듈을 참조하는 일이 적어지기 때문이다.
결과적으로 다른 모듈을 참조하는 일이 적어지면 모듈 간 의존성도 낮추는 것이므로 Low Coupling을 동시에 충족할 수 있다.
응집도 (Cohesion) 종류
결합도 | 종류 | 의미 |
High Cohesion | 기능적 응집도 (Functional Cohesion) | 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우 |
↑ | 순차적 응집도 (Sequential Cohesion) | 모듈 내의 한 활동으로부터 나온 출력값을 모듈 내의 다른 활동이 사용하는 경우 |
↑ | 교환적 응집도 (Communication Cohesion) | 서로 다른 기능을 수행하지만 동일한 입력과 출력을 사용하는 활동들이 모여있는 경우 |
↑ | 절차적 응집도 (Procedural Cohesion) | 모듈 안 구성요소들이 서로 다른 기능을 하지만 그 기능을 순차적으로 수행하는 경우 |
↑ | 시간적 응집도 (Temporal Cohesion) | 연관된 기능은 아니지만 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우 |
↑ | 논리적 응집도 (Logical Cohesion) | 실제와 달리 논리적으로만 같은 그룹으로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우 |
Low Cohesion | 우연적 응집도 (Coincidental Cohesion) | 모듈 내부 구성요소들이 서로 관련 없는 요소로 구성되어 있는 경우 |
'OOAD' 카테고리의 다른 글
[UML] 유스케이스 다이어그램(Usecase Diagram) 완벽 정리 (1) | 2022.09.15 |
---|---|
[OOP] 객체지향 설계 원칙 SOLID - OCP(개방 폐쇄 원칙) 이란? (0) | 2022.09.05 |
[OOP] 객체지향 설계 원칙 SOLID - SRP(단일 책임 원칙) 이란? (0) | 2022.09.02 |
[Design Pattern] GoF 디자인 패턴이란? (0) | 2022.06.05 |
[OOAD] GRASP Pattern이란? (0) | 2022.05.24 |