설계의 기본 원칙 : 응집도는 높게 결합도는 낮게
응집도 (Cohesion) : 개별 모듈을 설계할 때 지켜야 하는 원칙
코드들이 관련돼있어야 응집도가 높고, 응집도는 가능한 높게 설계하는 것이 좋음
- Functional : 기능적 응집도 (응집도 가장 높음~). 기능 하나만을 수행하는 코드들로 구성됨
- Sequential : 순차적 응집도
- Communicational : 통신적 응집도 (동일한 데이터 이용)
- Procedural : 절차적 응집도 (실행순서로만 연결돼있음)
- Temporal : 시간적 응집도 (코드들이 어떤 일을 하는 시점이 같을 때)
- Logical : 논리적 응집도 (기능들이 논리적으로 관련있을 때)
- Coincidental : 우연적 응집도 (응집도 가장 낮음. 이런 식으로 설계하면 X). 아무 관련 없는 코드들로 모듈이 구성돼있을 때
응집도
1. Functional Cohesion : 하나의 기능만 가짐. 어떤 코드를 제거하면 모듈은 기능 수행 못함(기능 하나만을 수행하도록 코드들이 끈끈하게 연결돼있기 때문) 유지보수 쉬움. 이해하기 쉬움. Black box (특정 하나의 기능만 수행하기 때문에 내부가 어떤 식으로 구현돼있는지 모르고 사용 가능)
예) Compute Cosine of Angle(코사인 값 구하는 모듈), Venify User Password(사용자 비번 검증), Calculate Mortgage Repayment(상환액 계산), Compute Rocket Trajectory(로켓 궤도 계산)
if 이 네가지 기능이 하나의 모듈 안에 있다면? 우연적 응집도를 가짐!!
2. Sequential Cohesion : 한 모듈 안에 여러 기능 가짐. 이 기능들은 데이터로 연결돼있음
순이익 계산 기능과 파운드->달러 변환 기능이 맞물려 사용 돼야함. 재사용 어려움
한 기능의 출력이 다른 기능의 입력이 됨 !!
예) 보험료 계산하고 분기별 지출액 산출
3. Communicational Cohesion : 통신적(대화적) 응집도. 기능들이 동일한 데이터를 사용하는 경우. 기능들이 독립적으로 행동할 수는 있음. 여러 기능들이 서로 연관돼있지 않는데, 동일한 데이터를 사용함.
예) 출력 파일 출력하고 저장
4. Procedural Cohesion : 절차적 응집도. 기능들이 기능적으로는 연관 없지만 순서(control) 로 묶여있는 경우 (절차적으로 연관돼있음)
5. Temporal Cohesion : 시간적 응집도. 여러 기능들이 동일한 시점에서 같이 실행됐을 경우
연관된 기능이라기 보단 특정 시간대에 처리되는 몇 개의 기능들을 모아 모듈화 한 것
예 – init(), exeption 함수 등
6. Logical Cohesion : 논리적 응집도. 코드들이 논리적으로 유사성이 있는 경우
예- 산술 함수들 (add, sub, mul, div 기능이 모인 함수)
7. Coincidental Cohesion : 우연적 응집도. 서로 연관이 전혀 없는 함수들이 우연히 모임
위와 같이 분리시키면 기능적 응집도 갖게 됨
'Study > 소프트웨어공학' 카테고리의 다른 글
SOLID (0) | 2021.08.22 |
---|---|
결합도 (0) | 2021.08.22 |
소프트웨어 아키텍처 (0) | 2021.08.22 |
UML, 유스케이스 모델링 (0) | 2021.08.22 |
릴리스 계획/스크럼 도구 (0) | 2021.08.22 |