일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- compare
- 객체 지향형 DB
- 프로그래밍 언어
- 네트워크형DB
- 객체관계형DB
- 온라인처리
- compare구조체
- c++
- ANSI-SPARC
- 공간DB
- Flutter
- 시간초과
- 멀티미디어DB
- 소프트웨어 개발도구
- 소프트웨어아키텍처 기술 동향
- BOJ
- vector unique erase
- Backtracking
- TOPCIT
- boj 11659
- 메인 메모리 DB
- aws winscp
- 계층형DB
- 정렬
- 백트래킹
- 개발프레임워크의 기술 동향
- 프로그래밍 언어 기술 동향
- sync_with_stdio(0)
- 클라우드기반 IDE
- 개발프레임워크
옐그's 코딩라이프
[TOPCIT][01] IV. 소프트웨어 설계 원리와 구조적 설계 (에센스 정리 요약) 본문
학습 목표
1. 설계 시 고려되어야 하는 소프트웨어 설계 원리의 종류와 내용을 설명할 수 있다.
2. 모듈 설계평가 기준인 응집도(Cohesion)와 결합도(Coupling)의 개념을 설명할 수 있다.
3. 구조적 설계방법을 이해하고, 설계한 내용을 표현할 수 있다.
핵심 키워드
- 분하르 추상화, 정보은닉, 단계적 정제, 모듈화, 구조화
- 응집도, 결합도
- 변환 중심 설계, 트랜잭션 중심 설계, 구조도(Structure Chart)
01 소프트웨어 설계 원리
분할과 정복이란?
- 기본적 설계원리
- 소프트웨어 설계 단계에서 사용자의 요구사항을 지속적으로 분할하여 문제영역의 복잡성을 줄여야 함
- 위를 통해 얻어진 결과는 역할단위의 독립성과 의존성을 고려하여 적절한 그룹으로 재조합되어야 함
서브시스템이란? 일반적으로 상위레벨에서 분할한 시스템 구성요소로 독립적으로 기능을 수행할 수 있고 컴파일 될 수 있어야 함
시스템 설계자는 문제를 서브시스템으로 분할하고 추후 여러 개발자 및 디자이너들이 서로 다른 서브시스템을 독립적으로 개발할 수 있도록 함. 이러한 분할 과정의 명확성은 서로 다른 개발자들에 의해 개발될 서브시스템들이 추후 원만히 통합되어 전체 시스템이 작동될 수 있도록 하기 위함
추상화(Abstraction)란?
- 큰 흐름을 잃지 않으면서 점차적으로 문제영역에 접근하기 위해 상세한 수준의 구현을 고민하기 보다 상위 수준에서 제품의 구현을 먼저 생각하는 것
- 유형은 자료 추상화, 제어 추상화, 과정 추상화로 나뉨
정보은닉(Information Hiding)이란?
- 각 모듈의 내부 내용을 감추고 인터페이스를 통해서만 메시지를 전달할 수 있도록 하는 개념으로 내부 정보 접근을 제한하여 한 모듈 또는 하부 시스템이 다른 모듈의 구현에 영향을 받지 않게 설계되는 것
- 시스템 설계에 있어 구성 요소 간의 독립성을 유지시켜준다는 점에서 중요함
단계적 정제(Stepwise Refinement)란?
- 프로그램의 구조에서 점차 모듈에 대한 세부 사항으로 내려가며 구체화됨
- 정제 과정에서 추상화의 수준은 낮아지며 각 기능은 분해되어 해결방안을 제시하게 됨
모듈화란?
- 시스템을 구성 요소인 모듈로 나누어 접근하는 것
- 시스템을 모듈화할 때는 하향식 접근 방법을 사용하여 기능 단위로 쪼개어 나감
- 시스템을 지능적으로 관리할 수 있도록 해주며, 복잡도의 문제를 해결해 줌
구조화란?
- 소프트웨어 시스템의 구조화는 분할 과정에 의해 얻어질 수 있음
02 응집도(Cohesion)와 결합도(Coupling)
응집도란?
- 모듈 내부가 얼마나 강한 연관성으로 뭉쳐져 있는가를 나타내는 모듈 성숙도의 측정치
- 또한 모듈이 하나의 임무를 수행하는 정도를 나타내는 것으로 모듈의 독립성을 측정하는 또 다른 척도
- 응집도가 높아지면 일반적으로 외부와의 상호 교류가 최소화될 수 있음
- 모듈의 응집도를 높이면 모듈 사이의 낮은 결합도를 얻을 수 있으며, 이와 반대로 낮은 응집도는 높은 결합도를 발생시킴
결합도란?
- 모듈 사이의 상호 연관성의 복잡도
- 모듈들 사이의 상호 교류가 많고 서로의 의존이 많을수록 모듈들 사이의 결합도는 높아짐
- 인터페이스의 부정확 설정과 불명확한 기능의 구분은 모듈 사이의 의존도와 결합도를 높임
- 결합도가 높을수록 한 모듈을 독립적으로 변경하기 어려움
03 구조적 설계 방법
변환흐름 중심 설계 (Transform Flow-Oriented Design)
- 정보를 받아들여 가공 처리한 후 그 결과인 외부세계에 출력하는 시스템을 이에 합당한 컴퓨터 구조로 매핑시키는 기법
- 시스템을 3가지로 나눔
1. 입력을 받아들여 시스템에서 사용할 수 있는 데이터로 정제하는 일 수행하는 부분
2. 데이터를 가공 처리하는 기능을 담당하는 부분
3. 가공 처리된 정보를 받아 적당한 출력물로 변환시켜 출력하는 부분
입력흐름 : 입력을 처리하는 입력 제어 모듈
변환중심 : 변환을 처리하는 변환 제어 모듈
출력흐름 : 출력을 처리하는 출력 제어 모듈
1. 입력 제어 모듈은 하위계층의 모듈들로부터 입력 데이터를 받아들여 상위계층의 모듈에 보냄 (필요시 입력데이터를 정제후 상위계층에 전달)
2. 출력 제어 모듈은 상위계층으로부터 출력 데이터를 받아 하위계층의 모듈들에게 보냄 (필요시 출력흐름을 정제한 후 하위계층의 모듈에게 전달)
3. 시스템의 복잡도에 따라 제어 모듈의 수가 변할 수 있으며 변환중심의 복잡도에 따라 변환을 처리하는 제어 모듈의 수가 결정될 수 있음
트랜잭션이란? 자료나 제어 시그널 등이 어떠한 행위를 유발시키는 것
트랜잭션흐름 중심 설계 (Transaction Flow - Oriented Design)
1. 트랜잭션흐름에 의한 설계는 들어온 입력을 여러 갈래의 출력흐름으로 쪼갤 수 있는 경우에 가능함.
2. 트랜잭션은 입력값을 평가하고 그 결과에 따라 여러 출력 경로 중 하나를 따라 흘러감
3. 이 경우 정보흐름의 중심을 트랜잭션 중심이라함
트랜잭션에 기초한 프로그램 구조의 3가지 구성 요소
1. 트랜잭션 중심으로 작용하는 모듈
2. 입력을 받아들이는 모듈
3. 각 동작 경로에 해당하는 하나 이상의 모듈
'TOPCIT' 카테고리의 다른 글
[TOPCIT][01] VI. 객체 지향 설계 (에센스 정리 요약) (0) | 2023.02.10 |
---|---|
[TOPCIT][01] V. 소프트웨어 아키텍처 설계 (에센스 정리 요약) (0) | 2022.12.27 |
[TOPCIT][01] III. 자료구조와 알고리즘 (에센스 정리 요약) (0) | 2022.11.27 |
[TOPCIT][01] II. 소프트웨어 재사용 (에센스 정리 요약) (1) | 2022.11.27 |
[TOPCIT][01] I. 소프트웨어 공학 개요 (에센스 정리 요약) (0) | 2022.11.14 |