설계원리
요구분석의 다음 활동
•
요구 분석 : ‘무엇을 만들 것인가?’(What)
•
설계: ‘어떻게 실현할 것인가?’(How)
◦
기본 구조 설계 : 아키텍쳐 설계 - 각 모듈 역할과 인터페이스 정의
◦
상세 설계 : 모듈 내부 알고리즘 및 데이터를 명세화
아키텍쳐 설계
분석단계에서 찾아낸 클래스와 메소드 교통정리
•
패키지
클래스의 묶음으로 정리
•
서브 시스템의 구성과 인터페이스 결정
데이터베이스 설계
데이터베이스에 대한 상세한 데이터 모델을 작성
•
개념적 스키마 작성
•
E-R Model(Entity-Relation Model)
•
관계형 데이터베이스 설계
•
정규화
객체지향 관점의 설계 작업
좋은 설계는?
Be Simple
설계를 움직이는 힘은,
복잡성 컨트롤
모든 소프트웨어 설계 기술의 목표는,
복잡한 문제를 단순한 조각으로 자르는 것
성능을 높이는 열쇠는,
복잡한 예외처리가 아니라 간결함
예외처리가 많은 이유?
남의 코드를 가져와서 사용하기에
편리한 유지 관리
모듈화
컴포넌트화
7가지 설계 목표
1.
복잡성 최소
2.
느슨한 결합
3.
강한 응집성
4.
확장성
5.
재사용성
6.
유지보수성
7.
유연성
모듈
•
보다 작고 이해할 수 있는 단위로 나뉘어진 것
적당하게!!
•
그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체
•
본체에서 분리되어 작은 부분으로 유기적으로 구성되어 있다가
필요할때 본체에 합류하여 그 기능을 수행할 수 있는 것
모듈화
문제를 소프트웨어의 구성요소가 될 만한 수준으로 분할하는 과정
소프트웨어를 작은 구성 요소, 패키지 또는 클래스로 나누는 것
느슨한 결합 (Loose Coupling)
<강한 결합의 경우 - 안 좋은 경우의 사진임>
결합이 없을 수는 없지만, 화살표를 최대한 끊어내라
강한 응집력
전통적 설계 원리(책)
효율성
처리 시간과 기억 공간
단순성
유지보수성에 영향을 주는 가장 중요한 특성
추상화
(현실의)복잡한 문제 → 추상화 → 개념 정립
소프트웨어의 구조를 이루는 계층의 파악
시스템의 핵심 특성에 초점을 두어 하나의 큰 시스템을 분할하는 원리
캡슐화
추상화된 대상이 제공하는 서비스를 쉽게 접근하게 하는 개념
정보 은닉(Information hiding)
분할된 핵심 정보만을 노출
모듈화
문제를
소프트웨어의 구성요소가 될 만한 수준으로 분할하는 과정
소프트웨어를
작은 구성요소인 패키지 or 클래스로 나누는 것
큰 시스템을 잘 모듈화된 시스템으로 완성





