6-1 설계 개요
- 설계
- 건축물 설계와 소프트웨어 설계
- 요구 분석 : 무엇을 만들 것인가
- 설계 ; 어떻게 실현할 것인가
- 기본 구조 설계 - 모듈의 역할과 인터페이스 정의
- 상세 설계 - 모듈 내부의 알고리즘과 데이터 명세화
- 좋은 설계가 되려면
- 요구분석명세서의 내용 모두 포함
- 유지보수가 용이해야함
- 변화에 쉽게 적응
- 시스템 변경으로 인한 영향 최소화
- 읽기 쉽고 이해가 잘 되게
- 설계 프로세스 : 시스템 설계 → 객체 설계 → 휴먼 인터페이스 설계 → 데이터 관리 설계 → 태스크 관리 설계 → 객체지향 분석
6-2 설계원리
- 분할과 정복
- 분산 시스템은 클라이언트, 서버로 분할
- 시스템은 여러 서브시스템으로 분할
- 서브시스템은 하나 이상의 패키지로 분할
- 추상화
- 복잡한 문제를 다루는 데 있어 가장 기본이 되는 매커니즘
- 문제 근본적인 특성에 집중
- 캡슐화
- 블랙 박스
- 정보은닉
- 타인이 무슨 생각을 하는지 알아내려면 많은 대화를 통해 생각을 알아내야 함
- public(공개, +), private(은닉, -), protected(부분 공개, #)
- 상속
- 상위 클래스를 하위 클래스가 물려받아 사용
- 다형성
- 오버로딩
- 연산자 중복 정의
- 메소드 중복 정의
- 메소드 구별
- 매개변수의 개수
- 매개변수의 자료형
- 오버라이딩
- 메소드 재정의
- 상위 클래스에서 정의한 메소드를 하위 클래스에서 다시 정의해 사용
- 메소드 재정의
- 오버로딩
6-3 모듈화
- 응집도
- 논리적 응집
- 구성 요소 간에 공통점이 있거나 관련된 임무 존재, 기능이 비슷해서 하나의 모듈
- 우연적 응집
- 구성 요소들이 말 그대로 우연히 모여 구성, 응집도 제일 낮음
- 논리적 응집
- 모듈 결합도
- 모듈과 모듈 사이의 관계에서 관련 정도 표현
- 모듈 간에는 관련이 적을수록 모듈의 독립성이 높아짐
- 데이터 결합
- 모듈이 매개변수를 통해 데이터만 주고받음
- 스탬프 결합
- 두 모듈이 정보를 교환할 때 필요 없는 데이터까지 주고받음
- C언어의 구조체
- 레코드나 배열 같은 자료구조로 매개변수 전달
- 제어 결합
- 제어 플래그를 매개변수로 사용
- 모듈 간 결합도 높고, 독립성 낮음
- 공통 결합
- 모듈이 공통 변수를 함께 사용함
- 유지보수가 어려움
- 내용 결합
- 모듈 간에 인터페이스를 사용하지 않고 go to 문으로 제어가 이동
- 상대 모듈의 데이터를 직접 변경 가능
- 유지보수가 어려움
6-4 사용자 인터페이스 설계
- 사용자 인터페이스
- 사람과 사물 또는 시스템, 기계, 컴퓨터 등 그 사이에서 의사소통을 할 수 있도록 일시적 또는 영구적인 접근을 목적으로 만들어진 가상 매개체
- 사용자 인터페이스
- CUI : 문자방식 명령어 입력
- GUI : 그래픽 기반
- NUI : 사용자 말과 행동 기반 제스쳐 입력 인터페이스
- 사용자 인터페이스의 기본 원칙
- 직관성
- 쉽게 사용할 수 있게 제작
- 용이한 검색, 쉬운 사용성, 일관성
- 유효성
- 정확하고 완벽하게 사용자의 목표가 달성될 수 있도록 제작
- 학습성
- 초보와 숙련자 모두 쉽게 사용할수 있도록 제작
- 유연성
- 사용자의 인터랙션을 최대한 포용, 실수 방지
- 직관성
- 사용자 인터페이스 설계 지침
- 사용법을 배우기 쉬워야 함
- 사용하기 편리해야 함
- 사용자가 데이터 입력을 제어할 수 있어야 함
- 사용자의 입력에 반응해야 함
- 도움말 제공
- 일관성 유지
- 설계과정
- 사용자 분석
- 사용자 유형 : 청소년, 숙련된 사용자, 초보자
- 태스크 분석
- 소프트웨어가 수행할 작업을 분석
- 유스케이스 별로 UI 흐름을 파악하는 것이 중요
- UI 설계와 구현
- GUI를 디자인하고 코드에 구현
- 설게와 구현에 사용되는 개념
- 사용성 테스트
- 테스트 목적 설정
- 대표 사용자 선정
- 설문 준비 및 테스트
- 사용자 분석