정보처리기사 도전기
[정보처리기사 실기 이론정리3] 소프트웨어 설계
츄98
2024. 7. 27. 08:50
1. 소프트웨어 설계: 요구사항 명세서를 바탕으로 소프트웨어의 구체적인 설계서를 작성하는 단계
2. 상위설계 : 아키텍처 설계 -> 데이터설계 -> 인터페이스 정의 -> 사용자 인터페이스 설계
3. 하위설계 : 모듈설계 -> 자료구조 설계 -> 알고리즘 설계
4. 소프트웨어의 설계의 원리
- 분할과 정복 : 큰 소프트웨어를 여러 개의 작은 서브시스템으로 나누어 각각을 완성
- 추상화 : 실세계의 복잡한 상황을 간결하고 명확하게 핵심 위주로 단순화
과정 추상화 : 상위 수준에서 수행 흐름만 설계
데이터 추상화 : 데이터 구조를 간단한 표현으로 대체
제어 추상화 : 명령들을 간단한 표현으로 대체 - 단계적 분해 : 기능을 점차적으로 작은 단위로 나누고 구체화
- 모듈화 : 시스템을 개별적으로 개발 가능한 모듈 단위로 나눈다.
- 정보은닉 : 객체가 자신의 정보를 숨기고, 외부의 접근을 제한, 캡슐화와 연관
- 결합도와 응집도 : 결합도를 낮추고, 응집도를 높이는 것이 좋은 설계
5. 소프트웨어 아키텍처 : 소프트웨어의 기본 구조로, 시스템의 컴포넌트와 이들 간의 관계를 기술
- 논리 뷰 : 시스템의 기능적 요구사항을 표현, 최종 사용자에게 제공되는 기능
- 구현 뷰 : 소프트웨어 모듈의 구성과 개발자의 관점을 반영, 컴포넌트 다이어그램으로 구현
- 프로세스 뷰 : 프로그램 실행 시의 시스템 표현, 동시성, 분산처리, 시스템 통합 등의 동적인 측면을 다룸
- 배치 뷰 : 시스템의 물리적 배치와 네트워크 연결을 표현, 성능, 가용성, 신뢰성 등의 비기능적 요구사항을 고려
- 유스케이스 뷰 : 아키텍처 설계 및 검증을 주도, 유스케이스 다이어그램 사용해 다른 뷰 검증

- 소프트웨어 아키텍처 패턴 : 재사용 가능한 소프트웨어 아키텍처 해결책
6. 계층화 패턴 :
- 소프트웨어를 여러 계층으로 구분하여 각 계층이 하위계층의 기능을 사용하도록 하는 구조
- OSI 7계층, TCP/IP 4계층
- 계층 간의 독립성
7. 클라이언트-서버 패턴
- 서버가 여러 클라이언트에 서비스를 제공
- 대부분의 웹 애플리케이션과 데이터베이스 시스템
- 중앙 집중식 데이터 관리와 자원의 효율적인 활용
8. 마스터-슬레이브 패턴
- 마스터 컴포넌트가 작업을 여러 슬레이브에 분산시키고, 슬레이브의 처리 결과를 종합
- 병렬 컴퓨팅
9. 파이프-필터 패턴
- 데이터 스트림 처리 시스템에서 필터 컴포넌트가 각 단계의 처리를 수행하고 파이프를 통해 결과를 전달
- Unix 쉘 스크립트 및 데이터 스크림 처리 시스템
10. 브로커 패턴
- 분산 시스템에서 컴포넌트 간의 통신을 중재하는 브로커 컴포넌트 사용
- 서비스 요청을 수신, 적절한 서비스 제공자에게 전달
11. 피어 투 피어 패턴
- 모든 컴포넌트(피어)가 서버와 클라이언트의 역할을 동시에 수행
- 파일 공유 시스템
- 중앙 집중식 서버에 의존하지 않는 분산 네트워크 구조 가능
12. 이벤트-버스 패턴
- 이벤트 버스를 통해 메시지를 발행하고 리스너가 이를 구독하는 구조
- 알림 시스템, 메시징 시스템
- 이벤트 기반의 비동기 통신 가능
13. 모델-뷰-컨트롤러 패턴(MVC 패턴)
- 모델(데이터 처리), 뷰(사용자 인터페이스), 컨트롤러(입력 처리)로 구성
- 웹 애플리케이션, GUI 기반 애플리케이션 등
- 각 컴포넌트의 독립성
14. UML(Unified Modeling Language) : 소프트웨어 시스템을 시각화 및 문서화하고, 소프트웨어 시스템의 구조와 동작을 명세하는 표준화된 모델링 언어
15. UML 구성요소(1) 사물
- 구조사물 : 시스템의 개념적, 물리적 요소 - 클래스, 유스케이스, 컴포넌트 등
- 행동사물 : 시간과 공간에 따른 요소들의 행위 - 상호작용, 상태머신
- 그룹사물 : 요소들을 그룹으로 묶은 것 - 패키지
- 주해사물 : 부가적 설명이나 제약조건 - 주석, 노트
16. UML 구성요소(2) 관계
- 일반화 관계 : 한 클래스가 다른 클래스를 포함하는 상위개념일 때의 관계, 객체지향 개념에서는 일반화 관계를 상속관계라고 함

- 연관관계 : 2개 이상 사물이 서로 관련된 관계, 한 한클래스가 다른 클래스에게 제공하는 기능을 사용할 때 표시
- 의존관계 : 연관관계와 같이 한 클래스가 다른 클래스에게 제공하는 기능을 사용할 때 표시,
연관관계와 차이점은, 두 클래스의 관계가 한 메서드를 실행하는 동안과 같이 매우 짧은 시간만 유지
한클래스의 명세가 바뀌면 다른 클래스에 영향을 줌

- 실체화 관계 : 인터페이스를 구현 받아 추상 메서드를 오버라이딩하는 것. 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정

- 집합 관계 - 집약관계(Aggregation) : 한 객체가 다른 객체를 소유하는 'has a'관계, 전체 객체의 라이프타임과 부분객체의 라이프타임은 독립적, 전체 객체가 사라진다 해도 부분 객체는 사라지지 않음
- 집합 관계 - 합성관계(Composition) : 부분 객체가 전체 객체에 속하는 관계로 긴밀한 필수적 관계, 전체 객체의 라이프타임과 부분 객체의 라이프 타임은 의존적, 전체 객체가 없어지면 부분 객체도 없어짐

17. UML 구성요소(3) 다이어그램
- 구조 다이어그램
| 클래스 다이어그램(Class) | 시스템의 클래스와 이들 간의 관계 표현 |
| 객체 다이어그램(Object) | 시스템 내의 객체와 이들 간의 관계 표현 |
| 컴포넌트 다이어그램(Component) | 시스템의 물리적 구조, 즉 컴포넌트와 그 상호작용 표현 |
| 배치 다이어그램(Deployment) | 시스템의 물리적 배치와 구성요소들 간의 관계 표현 |
| 복합체 구조 다이어그램(Complex Structure) | 시스템 내의 복합 구조 표현 |
| 패키지 다이어그램(Package) | 시스템의 패키지와 이들 간의 관계 표현 |
- 행위 다이어그램
| 유스케이스 다이어그램(Use Case) | 시스템의 기능과 사용자 간의 상호작용을 표현 |
| 순차 다이어그램(Sequence) | 객체 간의 상호작용을 시간 순서대로 표현 |
| 커뮤니케이션 다이어그램 (Communication) |
객체 간의 상호작용과 통신을 표현 |
| 상태 다이어그램(State) | 객체의 생명주기 동안의 상태 변화를 표현 |
| 활동 다이어그램(Activity) | 시스템의 프로세스 또는 워크플로우 표현 |
| 상호작용 다이어그램(Interaction) | 시스템의 상호작용을 하나의 고수준 워크플로우로 표현 |
| 타이밍 다이어그램(Timing) | 객체의 행동과 시간에 따른 상호작용을 표현 |
18. 클래스 다이어그램
- 자기만의 속성(Attribute)과 일정한 행동(Behavior)으로 구성
- 여러 클래스들은 서로 연관이나 상속, 의존 관계 등으로 서로 간의 상호작용을 표현
| 표기법 | 접근제한자 | 사용범위 |
| - | private | 해당 클래스 내에서만 접근 가능 |
| # | protected | 상속, 동일 패키지 내에서만 접근 가능 |
| + | public | 어디서든 접근 가능 |
19. UML 구성요소(4) 유스케이스 다이어그램
- 시스템과 사용자의 상호작용을 다이어그램으로 표현
- 사용자 관점에서 시스템의 서비스 혹은 기능 혹은 관련한 외부 요소를 보여준다.
- 시스템: 만들고자 하는 프로그램 명칭
- 액터 : 시스템 외부에 있고 시스템과 상호작용 하는 사람, 시스템을 표현
- 유스케이스 : 사용자 입장에서 바라본 시스템의 기능
- 관계 : 액터와 유스케이스 사이의 의미있는 관계

| 관계 | 설명 / 표기 |
| 연관관계 (Association) | 유스케이스와 액터 간의 상호작용이 있음을 표현 유스케이스와 액터를 실선으로 연결 |
| 포함관계(Include) | 유스케이스를 수행할 때 반드시 실행되어야 하는 경우 |
| 확장관계(Extend) | 유스케이스를 수행할 때 특정 조건에 따라 확장 기능 유스케이스를 수행하는 경우 |
| 일반화관계(Generalization) | 유사한 유스케이스 또는 액터를 모아 추상화한 유스케이스 |

20. UML 구성요소(5) 시퀀스 다이어그램
- 객체 간의 상호작용 메시지 시퀀스를 시간의 흐름에 따라 나타내는 다이어그램
- 객체(Object)와 생명선(Lifeline) : 객체는 직사각형, 라이프라인은 객체에서 이어지는 점선으로 표현, 점선은 위에서 아래로 갈수록 시간의 경과를 의미
- 활성박스 : 기다란 직사각형으로 표현, 현재 객체가 어떤 활동을 하고 있음을 의미
- 메시지 : 동기, 비동기, 자체, 반환 메세지

21. UML 구성요소(5) 상태 다이어그램
- 한 객체의 상태 변화를 나타내는 다이어그램
