본문 바로가기

정보처리기사/필기

내가 기억해야 할 정처기 - 1과목 소프트웨어 설계

추천 참고자료: https://worlf.tistory.com/55

 

# 1장 요구사항 확인

## 소프트웨어 생명 주기

애자일 모형 기반 소프트웨어 개발 모형 종류

- 스크럼

- XP

- 칸반

- Lean

- 크리스탈

- ASD

- 기능 중심 개발

-DSDM

- DAD

 

애자일 개발 4가지 핵심 가치

1. 개인, 상호작용 > 프로세스, 도구

2. 실행되는 SW > 방대한 문서

3. 고객과 협업 > 계역 협상

4. 변화에 반응 > 계획에 따르기


## 요구사항 정의

요구분석 사용 도구

- 애자일 방법

- UML(유스케이스 다이어그램, 시퀀스 다이어그램)

- 자료 흐름도(DFD)

- 데이터 사전

- 소단위 명세서

- 개체 관계도

- 상태 이전도

- 제어 명세서

 

자료 흐름도 구성 요소

 

데이터 사전 기호


## UML

사물

- structural Things(구조)

- Behavioral Things(행동)

- Grouping Things(그룹)

- Annotation Things(주해)

 

구조적(Structural, 정적) 다이어그램

- 클래스: 클래스와 클래스가 가지는 속성, 클래스 사이의 관계

- 객체: 클래스에 속한 사물들, 즉 인스턴스를 특정 시점의 객체와 객체의 관계

- 컴포넌트: 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스

- 배치: 결과물, 프로세스, 컴포넌트, 간의 관계나 컴포넌트 간의 인터페이스

- 복합체 구조: 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조

- 패키지: 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계

 

행위(Behavioral, 동적) 다이어그램

- 유스케이스: 사용자와 사용관계로 구성되며, 사용 사례 간에는 여러 형태의 관계로 이루어짐

- 순차(sequence): 상호 작용하는 시스템이나 객체들이 주고받는 메세지

- 커뮤니케이션: 순차 다이어그램과 같이 동작에 참여하는 객체들이 주고 받는 메세지를 포함, 추가로 객체들 간의 연관까지 표현

- 상태(state): 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변하는지 표현,
           이벤트(event)에 의한 객체들의 상태 변화를 그림으로 표현

- 활동: 시스템이 어떤 기능을 수행하는지, 객체의 처리 로직이나 조건에 따라 처리의 흐름을, 순서에 따라 표현

- 상호작용 개요: 상호작용 다이어그램 간의 제어 흐름

- 타이밍: 객체 상태 변화와 시간 제약을 명시적으로 표현

 

※절차 다이어그램 없음, 주의

 

UML 사물

- Structural Things

- Behavioral Things

- Grouping Things

- Annotation Things

 

UML 관계

- 연관(Association): 2개 이상의 사물이 서로 관련됨

- 집합(Aggregation): 하나의 사물이 다른 사물에 포함됨

- 포함(Composition): 집합의 특수한 형태, 포함하는 사물의 변화가 포함되는 사물에게 영향을 미침

- 일반화(Generalization): 하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지 표현

- 의존(Dependency): 연관 관계와 같이 서로 연관은 있으나, 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지함

- 실체화(Realization): 한 사물이 다른 사물에게 오퍼레이션을 수행하도록 지정


## 주요 ULM 다이어그램

유스케이스 다이어그램 구성요소

- 시스템/시스템 범위

- 액터

- 유스케이스

- 관계(연관, 포함, 확장, 일반화)

 

클래스 다이어그램 구성요소

- 클래스(이름, 속성, 오퍼레이션)

- 제약조건

 

- 관계(연관, 집합, 포함, 일반화, 의존)

 

순차 다이어그램 구성요소

- 액터

- 객체

- 생명선

- 실행상자

- 메시지

- 회귀 메시지

- 제어 블록


# 2장 화면 설계

## 사용자 인터페이스

사용자 인터페이스 종류

- CLI(Command Line Interface)

- GUI(Graphical User Interface)

- NUI(Natural User Interface)

    재스처: Tap(누르기), Double Tap(두번 누르기), Drag(누른 채 움직임), Pan(누른 채 계속 움직임), Press(오래 누르기), Flick(빠르게 스크롤), Pinch(두 손가락으로 넓히기/좁히기)

- VUI(Voice User Interface)

- OUI(Organic User Interface)

 

사용자 인터페이스 개발 시스템의 기능

- 사용자 입력의 검증

- 에러 처리와 에러 메시지 처리

- 도움 프롬프트 제공


# 3장 애플리케이션 설계

## 소프트웨어 아키텍처

추상화: 문제의 전체적이고 포괄적인 개념을 설계한 후 차례대로 세분화하여 구체화함

추상화 유형: 제과자(제어, 과정, 자료(데이터))

 

정보 은닉: 모듈에 대한 정보가 감추어져 있음

- 수정, 시험, 유지보수 용

시스템 품질 속성:

성능, 변경용이성, 사용성, 기능성, 가용성, 확장성, 보안 등

암기: 성능 좋은 폰으로 변경해서 용량이 사기가(4G) 확보 됐다.

 

아키텍처 설계 과정

1. 설계 목표 설정

2. 시스템 타입 결정

3. 아키텍처 패턴 적용

4. 서브시스템 구체화

5. 검토

 

협약에 의한 설계

- 선행 조건: 오퍼레이션 호출 전 참

- 결과 조건: 오퍼레이션 수행된 후 만족

- 불변 조건: 오퍼레이션 실행되는 동안 항상 만족


## 객체지향

객체지향 주요 구성요소

- 객체(Object): 데이터와 데이터를 처리하는 함수를 묶어놓은 하나의 소프트웨어 모듈

    데이터(속성, 상태 변수, 상수, 자료구조)

    함수(메소드, 서비스, 동작, 연산)

     메세지: 객체에게 어떤 행위를 하도록 지시하는 명령

- 클래스(Class): 공통된 속성과 연산을 갖는 객체의 집합

- 캡슐화(Encapsulation)

- 상속(Inheritance)

- 다형성(Polymorphism)

    메소드 오버로딩: 메소드명은 같지만 매개 변수의 개수와 타입을 다르게 함으로써 구현, 구분할 수 있음

- 연관성(Relationship)


## 객체지향 분석 및 설계

객체지향 분석: 소프트웨어를 개발하기 위한 비즈니스를 객체와 속성, 클래스와 멤버, 전체와 부분 드응로 나누어서 분석해내는 기법

객체지향 분석의 방법론

- Coad와 Yourdon 방법: ER 다이어그램 사용

- Rumbaugh 방법:  객체모델, 동적모델, 기능 모델

- Booch 방법: 클래스와 객체

- Jacobson: Use Case 강조

- Wirgs-Brock 방법: 고객 명세서 평가

 

럼바우의 분석 기법

객체 모델링(Object, 정보모델링): 객체 다이어그램

동적 모델링(Dynamic): 상태 다이어그램

기능 모델링(Functional): 자료 흐름도(DFD)

암기: 객동기

 

객체지향 설계 원칙

- 단일 책임 원칙(SRP, Single Responsibility Principle): 객체는 단 하나의 책임만 가져야함(응집도 높고 결합도는 낮게)

- 개방-폐쇄 원칙(OCP, Open-Closed Principle): 클래스는 확장에 대해 열려 있고 견경에 대해 닫혀 있어야함

- 리스코프 치환 원칙(LSP, Liskov Substitution Principle): 자식 클래스는 부모 클래스에서 가능한 행위를 수행하거나 교체 가능해야함

- 인터페이스 분리 원칙(ISP, Interface Segregation Principle): 자신이 사용하지 않는 인터페이스와 관계나 영향 받지 않아야함

- 의존 역전 원칙(DIP, Dependency Inversion Principle): 추상성이 낮은 클래스보다 높은 클래스와 의존 클래스를 맺어야함


## 모듈

결합도: 모듈 간의 연관 관계

- 자료 결합도(Data): 필요한 데이터만

- 스탬프 결합도(Stamp): 자료구조

- 제어 결합도(Control): 플래그로 동작제어

- 외부 결합도: 외부 선언 변수 참조

- 공통 결합도(Common): 전역 변수 공유

- 내용 결합도(Content): 내부를 직접 참조

암기: 크립트 일 끝

 

응집도(Cohesion): 모듈의 내부 요소들이 서로 관련있는 정도

- 기능(Functional): 단일 가능

- 순차(Sequence): 출력->입력 연결

- 통신(Communication): 같은 데이터 사용

- 절차(Procedural): 순서대로 실행

- 시간(Temporal): 같은 시간에 실행

- 논리(Logical): 비슷한 종류끼리
- 우연(Coincidental): 아무 관계 없음

암기: 기순통 절시논우

 

팬인: 제어하는 모듈 수(모듈에 들어오는것)

팬아웃: 제어되는 모듈 수(모듈에 나가는것)

 

N-S 차트: 논리의 기술에 중점을 둔 도형을 이용한 표현 방법

- 논리구조로 표현

- GOTO나 화살표를 이용하지 않음

- 조건이 복합되어 있는 곳의 처리를 시각적으로 면확히 식별하는데 접합


디자인 패턴: 소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법, GoF가 구체화 및 체계화함

 

1. 생성패턴: 객체 생성 관련

- Factory Method: 객체 생성을 하위 클래스에서 담당 (객체 생성 책임 분리), Virtual-Constructor

- Abstract Factory: 관련된 객체들을 한 번에 생성할 수 있도록 하는 팩토리

- Builder: 복잡한 객체 생성을 단계별로 수행

- Prototype: 기존 객체를 복제하여 새로운 객체 생성

- Singleton: 하나의 인스턴스만 생성되도록 제한

암기: 팝스프(FABSP)

 

2. 구조 패턴: 클래스/객체 간  관계 정의

- Adapter : 서로 다른 인터페이스를 변환하여 연결

- Bridge: 구현과 추상을 분리하여 독립적으로 확장 가능하게 함

- Composite: 객체들을 트리 구조로 구성하여 계층적으로 관리

- Decorator: 그때그때마다 추가 설계

- Facade: 복잡한 서브시스템을 단순화하여 제공

- Flyweight: 객체를 공유하여 메모리 사용을 줄이는 패턴

- Proxy: 실제 객체 대신 대리 객체를 사용하여 접근을 제어

암기: ABCD2FP

 

3. 행위 패턴: 객체 간 협력 및 역할 분배

- Template Method: 알고리즘의 구조를 정의하고, 세부 구현은 하위 클래스에서 처리

- Visitor: 객체 구조를 변경하지 않고, 새로운 기능을 추가

- Observer: 한 객체의 상태 변화가 다른 객체들에게 자동으로 전파

- Interpreter: 언어의 문법을 정의하고 해석하는 패턴

- Iterator: 컬렉션 요소를 순차적으로 접근하는 패턴

- Chain if Resposibility: 요청을 여러 객체가 처리하도록 연결

- Command: 요청을 객체로 캡슐화하여 실행

- State: 객체의 상태에 따라 다른 동작을 수행

- Strategy: 알고리즘을 객체로 캡슐화하여 교체 가능하게 함

- Mediator: 객체 간 직접 통신을 막고, 중재자를 통해 통신

- Memnto: 객체의 상태를 저장하고 복원

암기: 티비 요(O)2익슴(TV O 2(ICSM))

참고: https://velog.io/@1117mg/%EC%A0%95%EC%B2%98%EA%B8%B0-%EC%8B%A4%EA%B8%B0-%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-GoF-%ED%95%B5%EC%8B%AC%EB%A7%8C-%EC%99%B8%EC%9A%B0%EA%B8%B0