1과목 소프트웨어 설계
1. 애자일 방법론
- 정의 : 고객 요구사항 변화에 중심을 둔 개발 방법론
- 주요 가치 : 용기, 단순성, 의사소통, 피드백, 존중(용단의피존)
- XP(익스트림 프로그래밍) : 애자일 방법론을 통한 프로그래밍 기법 중 하나
※ 고객 요구사항 최우선이기에 유연한 방법론이고, 문서 중심이 X
종류 : XP, 스크럼, 린, DSDM(동적 시스템 개발 방법론), FDD(기능 중심 개발)
2. UI 설계원칙(직유학유)
- 직관성 : 누구나 쉽게 이해하고 사용할 수 있어야 한다.
- 유효성 : 사용자 목적을 정확히 달성할 수 있어야 한다.
- 학습성 : 누구나 쉽게 배우고 익힐 수 있어야 한다.
- 유연성 : 사용자 요구에 최대한 수용하고 오류를 최소화해야한다.
※ 오류를 숨겨서는 안된다.
2-1. UI 종류
CLI(Command Line Interface) : 텍스트로만 이루어진 것.(윈도우 기준 파일 검색에서 cmd 치면 나오는 화면)
GUI(Graphic User Interface) : 우리가 흔히 쓰는 마우스를 이용해 그래픽을 클릭
NUI(Natural User Interface) : 말과 행동으로 동작하는 UI
VUI(Voice User Interface) : 음성으로 동작
OUI(Organic User Interface) : 사물과 사용자가 상호작용
3. 요구사항 유형
기능적 요구사항 : 실제 시스템 수행에 필요한 요구사항들(ex. 조회, 인출, 송금)
비기능적 요구사항 : 성능, 품질, 보안, 안정성 등 실제 수행에 보조적인 지표(ex. 화면이 3초 이내에 보여져야 함.)
※ 기능이 있냐 없냐 => 기능적 / 성능이 이 정도는 나와야 하지 않나? => 비기능적
3-1. 요구사항 개발 프로세스
도출/추출 → 분석 → 명세 → 확인/검토(검증)
분석 : 비용과 일정에 대한 제약설정, 타당성 조사, 요구사항 정의 문서화
명세 : 설계 명세서 작성론
3-2. 요구사항 검토 방법
- 동료검토 : 요구사항 명세서 작성자가 명세서 내용을 직접 설명하고 동료가 결함 발견
- 워크스루 : 검토 회의 전 요구사항 명세서를 미리 배포해 사전 검토 후 짧은 회의로 결함 발견
- 인스펙션 : 요구사항 명세서 작성자를 제외한 다른 전문가들이 명세서를 확인하며 발견(정적 테스트에 가까움)
4. CASE 도구
Computer Aided Software Engineering 도구로, 컴퓨터의 도움을 받는 요구사항 검증 방법(소프트웨어 공학의 자동화 의미)
- s/w 라이프 사이클 전 단계의 연결
- 그래픽 지원, 모델들 사이의 모순 검사, 오류 검증
- 다양한 소프트웨어 개발 모형 지원
- 다이어그램 작성 가능(자료 흐름도 등)
- 개발자 협업에 도움
- 객체지향, 구조 시스템 등 모든 분야에 적용
- 2010년 이전 1980년대에 소개, 1990년 대부터 자주 사용됨.
5. 럼바우 객체지향 분석 기법
객체 모델링 : 객체 다이어그램, 시스템에서 요구하는 객체를 찾고 객체들 간의 관계를 정의하며 가장 중요해서 선행되어야 함.
동적 모델링 : 상태 다이어그램, 시간의 흐름에 따라 객체들 사이의 제어 흐름, 동작 순서들. 동적인 행위 표현
기능모델링 : 자료 흐름도(DFD), 프로세스들의 자료 흐름 중심으로 처리 과정 표현
※ 객체 → 동적 → 기능
객체 : 모델링, 객체
동적 : 상태, 동작 순서
기능 : 자료흐름도(DFD)
+ Coad와 Yourdon 방법 : 클래스와 객체(E-R 다이어그램) 식별 및 의미관계 식별
+ Booch 방법 : 소프트웨어 구성요소를 그래픽 표기법 이용하여 모델링 객체 모델링, 동적 모델링, 기능 모델링
(미시적 + 거시적)
+ Jacobson : Use Case 강조하여 사용하는 분석 방법
+ Wirfs-Brock : 분석과 설계 간의 구분 x. 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 기법
6. 객체 지향 기법
캡슐화
- 데이터와 함수를 하나로 묶는 것
- 재사용성 증가, 오류 파급 효과 감소
- 인터페이스 단순화, 객체 간 결합도 낮아짐
정보은닉 : 다른 객체에서 자신의 정보를 숨기고 자신의 연산만을 통해 접근
상속 : 상위 클래스(부모) 속성 및 연산을 하위(자식) 클래스가 물려받는 것.
추상화
다형성
미들웨어 + DB, MOM, TP-Monitor(Transaction Processing Monitor)
- WAS : 웹 어플리케이션 서버(Web Server : 정적인 콘텐츠 처리하는 한편 동적인 콘텐츠 처리함)
- RPC : Remote Procedure Call. 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 방식
- ORB : Object Request Broker. 객체 요청 브로커는 객체 지향 미들웨어로 코바 표준 스펙 구현
7. 소프트웨어 생명주기
- 폭포수 모델 : 고전적으로 전통적인 모델, 순차적인 개발이 특징, 이전 단계를 다시 보기 어려움.
- 나선형 모델 : 위험 분석 및 위험 최소화가 목적(계획 → 위험분석 → 개발 및 검증 → 고객 평가 과정)
이와 같은 과정을 여러번 반복하면서 리스크를 줄이는 게 특징
- 프로토타입 : 견본/시제품을 통해 최종 결과 예측, 인터페이스 중심, 요구사항 변경 용이
- HIPO(계층적 입력처리 출력) : 하향식 설계. 가시적, 총체적, 세부적 다이어그램으로 구성,
기능과 자료 의존 관계 동시 표현
- V-모델(HIPO + Test추가)
8. 하향식 설계, 상향식 설계
- 하향식 설계 : 절차지향(순차적) / 최상위 컴포넌트 설계 후 하위 기능 부여
- 상향식 설계 : 객체지향 / 최하위 모듈부터 설계 후 이들을 결합해 검사 / 기능 추가 어려움
9. 자료흐름 DFD
시스템이나 프로세스 내 정보의 흐름을 시각적으로 나타내는 도표
process : 원
data store : 직선(단선/이중선)
data flow : 화살표
terminator : 사각형
※ 삼각형 안 쓰임.
10. 다이어그램
구조, 정적 다이어그램 종류 : 클 객 컴 배 복 패(클래스, 객체, 컴포넌트, 배치, 복합체, 패키지)
행위, 동적 다이어그램 종류 : 유 시 커 상 활 타(유스케이스, 순차, 커뮤니케이션, 상태, 활동, 타이밍, 상호작용)
10-1. 행위, 동적 다이어그램
유스케이스 다이어그램 : 사용자 요구를 분석
순차 다이어그램 : 시스템, 객체들이 주고 받은 메시지 표현 / 액터, 객체, 생명선, 메시지, 제어 삼각형 등 존재
액터란? 시스템과 상호작용하는 사람이나 다른 시스템에 의한 역할
- 사용자 액터 : 기능을 요구하는 대상이나 시스템의 수행 결과를 통보받는 사용자
- 시스템 액터 : 본 시스템과 데이터를 주고 받는 연동 시스템
11. 디자인 패턴 GoF(Gong of Four)
디자인 패턴은 자주 발생하는 문제를 해결하기 위한 반복적 해결 기법
※ 주로 어떤 패턴에 어떤 것이 속하는지 나옴.
[생성패턴] : 생빌프로팩앱싱
- 빌더 : 조립, 객체 생성
- 프로토타입 : 원본 객체 복제해서 생성
- 팩토리메서드 : 객체 생성을 서브클래스에서 결정해서 생성 / Virtual-Constructor 패턴이라고도 함.
- 앱스트랙 팩토리
- 싱글톤 : 필요시 하나의 객체만 생성할 수 있게(DB 연결 등)
[구조패턴] : 구브데퍼플프록컴어
- 브리지 : 독립적 확장이 가능하게 구조 구성.
※ 서로 연결하는 역할 아님.(구현부에서 추상층을 분리. 기능과 구현을 두 개의 별도 클래스로 구현)
- 데코레이터 : 상속 X. 확장할 수 있는 구조 구성
- 퍼사이드 : 상위 인터페이스 구성 후 서브 클래스 기능 사용할 수 있게 구조 구성
- 플라이 웨이트 : 인스턴스 공유 및 메모리 절약할 수 있게 구조 구성
- 프록시 : 접근이 힘든 객체를 연결하는 인터페이스 역할 할 수 있게 구조 구성
- 컴포지트 : 복합, 단일 객체 구분 X 사용할 수 있게 구조 구성
- 어댑터 : 비호환 인터페이스에 호환성 부여할 수 있는 구조로 구성
[행위패턴] 나머지. 메멘토, 옵저버, 전략, 템플릿, Visitor(방문자)
옵저버 : 한 객체의 상태가 변화하면 객체에 상속되어있는 다른 객체들에게 변화된 상태를 전달. 분산된 시스템 간에 이벤트 생성, 발행. 이를 수신해야 할 때
Visitor(방문자) : 각 클래스들의 데이터 구조에서 처리 기능 분리하여 별도의 클래스로 구성됨. 분리된 처리기능은 각 클래스를 방문하여 수행
12. 코드의 종류
순차 코드 : 최초의 자료부터 일정한 일련번호를 부여하는 방법
블록 코드 : 공통 블록으로 구분하고 블록 내에 일련번호 부여하는 방법
10진 코드 : 0~9까지 10진 분할해 코드 부여. 표의 숫자 코드
그룹 분류 코드 : 대, 중, 소 등 그룹으로 분류. 합성 코드
연상 코드 : 명칭이나 관계있는 숫자, 문장 등을 부여
13. 자료 사전 기호
= 정의
+ 연결
{ } 반복
[ ] 선택
( ) 생략
** 주석
14. 이진검색 알고리즘
(1) 탐색 효율이 좋고, 탐색 시간이 적게 소요됨.
(2) 검색할 데이터가 정렬되어있어야 함.
(3) 비교횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어듦.
15. 피보나치 검색
피보나치 수열에 따라 다음에 비교할 대상을 선정하여 검색