자격증/정보처리기사 필기 - 개념

[정보처리기사 필기] 제1과목 소프트웨어 설계 - 애플리케이션 설계

쏠솔랄라 2025. 4. 30. 23:00

 

 

소프트웨어 아키텍처

 

 

1. 소프트웨어 아키텍처의 설계

: 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체

-> 좋은 품질을 유지하며 사용자의 비기능적 요구사항으로 나타난 제약을 반영하고, 기능적 요구사항을 구현하는 방법을 찾는 해결 과정

 

 

2. 모듈화 Modularity

: 시스템의 기능들을 모듈 단위로 나누는 것

- 모듈화를 통해 기능 분리가 가능해 인터페이스가 단순해짐

- 프로그램의 효율적인 관리가 가능하고 오류의 파급 효과를 최소화

 

 

3. 추상화 Abstraction

: 문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것

- 과정 추상화: 전반적인 흐름만 파악할 수 있게 설계

- 데이터 추상화: 데이터 구조를 대표할 수 있는 표현으로 대체

- 제어 추상화: 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체

 

 

4. 단계적 분해 Stepwise Refinement

: 하향식 설계 전략 by Niklaus Wirth

- 추상화의 반복에 의해 세분화

 

 

5. 정보은닉 Information Hiding

: 다른 모듈이 잘 알아보기 어렵게 변경하는 기법

 

 

6. 소프트웨어 아키텍처의 품질 속성

: 품질 평가 요소

 

- 시스템 측면: 성능, 보안, 가용성, 가능성, 사용성, 변경 용이성, 확장성

- 비즈니스 측면: 시장적시성, 비용, 예상 시스템 수명

- 아키텍처 측면: 개념적 무결성, 정확성/완결성, 구축가능성

 

 

7. 서프트웨어 아키텍처의 설계 과정

 

설계 목표 설정 > 시스템 타입 결정 > 아키텍처 패턴 적용 > 서브시스템 구체화 > 검토

 

 

아키텍처 패턴

 

 

1. 아키텍처 패턴: 전형적 해결 방식, 기본적 윤곽, 예제

- 아키텍처 패턴의 장점: 개발시간 단축, 고품질 소프트웨어 생산, 검증된 모델로 안정적 개발, 공통 패턴 이용으로 구조 이해가 쉽고 의사소통이 유리함, 구조 이해가 쉬움

 

 

2. 레이어 패턴: 시스템을 계층(Layer)으로 구분하여 구성하는 고전적인 방법 중 하나

- 각각의 서브시스템들이 계층 구조를 이룸

- 서로 마주보는 두 개의 계층에만 영향을 미치므로 변경작업이 용이

eg. OSI 참조 모델

 

 

3. 클라이언트-서버 패턴: 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성

- 사용자는 클라이언트와만 의사소통을 한다

- 서버는 클라이언트의 요청에 대비해 항상 대기 상태를 유지해야 한다

 

 

4. 파이프-필터 패턴: 캡슐화해서 파이프를 통해 전송

- 필터 컴포넌트는 재사용성이 좋고, 추가가 쉬워 확장이 용이

- 필터 컴포넌트를 재배치해 다양한 파이프라인 구축 가능

eg. UNIX의 쉘(Shell)

 

 

5. 모델-뷰-컨트롤러 패턴 MVC Pattern: 서브시스템을 3개의 부분으로 구조화

- 모델: 서브시스템의 핵심 기능과 데이터 보관

- 뷰: 사용자에게 정보 표시

- 컨트롤러: 사용자로부터 입력된 변경 요청을 처리하기 위해 모델에게 명령을 보냄

 

 

6. 기타 패턴

: 마스터-슬레이브 패턴, 브로커 패턴, 피어-투-피어 패턴, 이벤트-버스 패턴, 블랙보드 패턴, 인터프리터 패턴

 

 

객체지향(Object-Oriented)

 

 

1. 객체지향

: 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 객체들을 조립해서 작성할 수 있는 기법

 

- 객체: 데이터와 그 데이터에 관련되는 동작을 포함한 개념. 소프트웨어 모듈

- 객체 지향: 실 세계의 개체entity를 속성attribute과 메소드method가 결합된 형태의 객체object로 표현하는 개념

 

 

2. 클래스 Class

: 공통된 속성과 연산(행위)을 갖는 객체의 집합

- 클래스로부터 생성된 새로운 객체를 인스턴스라 함

 

 

3. 캡슐화

: 세부 내용이 은폐(정보 은닉)되어 외부에서의 접근이 제한적

- 캡슐화된 객체들은 재사용이 가능

- 외부에서의 접근이 제한적이기 때문에 외부 모듈의 변경으로 인한 파급 효과가 적음

- 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐

 

 

4. 상속 Inheritance

: 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것

- 자신의 클래스 내에서 다시 정의하지 않고서도 죽시 자신의 속성으로 사용할 수 있음

- 새로운 속성과 연산 첨가 가능

 

 

5. 다형성

: 하나의 메시지에 대해 각각의 객체(클래스)가 가지고 있는 고유한 방법으로 응답할 수 있는 능력

 

 

6. 연관성

: 두 개 이상의 객체(클래스)들이 상호 참조하는 관계

ex. 연관화, 분류화, 집단화, 일반화, 특수화/상세화

 

 

모듈

 

 

1. 모듈: 소프트웨어를 각 기능별로 분할하는 것으로, 소프트웨어 구조를 이루는 기본 단위

- 단독으로 컴파일이 가능하며, 재사용 할 수 있음

- 모듈의 독립성은 모듈의 독립성은 결합도와 응집도에 의해 측정

 

 

2. 결합도 Coupling

: 모듈과 모듈 사이의 관련성 -> 낮아야 한다 // 내공외제스자

내용 > 공통 > 외부 > 제어 > 스탬프 > 자료(데이터)

 

 

3. 응집도 Cohesion

: 내부 명령어들 사이의 관련성 -> 높아야 한다 // 기순교절시논우

기능 > 순차 > 교환 > 절차 > 시간 > 논리 > 우연

 

 

4. 공통 모듈

: 여러 프로그램에서 공통적으로 사용할 수 있는 모듈

- 자주 사용하는 계산식이나 매번 사용하는 사용자 인증 같은 기능들이 공통 모듈로 구성

- 정확성, 명확성, 완전성, 일관성, 추적성

 

 

코드

 

 

1. 코드: 식별 기능, 분류 기능, 배열 기능

- 코드의 목적: 정보를 빠르게 전달 -> 손쉽게 찾기 위해

 

 

2. 코드의 종류

- 순차코드: 발생순서대로 차례로 넘버링

- 블록코드: 공통성 있는 것을 분류

- 10진코드: 0부터 9까지 10진 분할 -> 이걸 다시 10진 분할 ex. 도서분류코드

- 그룹 분류 코드: 대중소

- 연상코드

- 표의 숫자 코드: 길이, 넓이, 부피, 지름 -> 유효숫자코드

- 합성코드: 조합해서 만드는 코드 ex. 비행기 좌석 등 KE752

 

 

디자인 패턴

 

 

1. 디자인 패턴 Creational Pattern: 각 모듈의 역할이나 인터페이스와 같은 코드를 재사용할 수 있도록 패턴화한 것

- 구조 파악이 용이

- 객체지향 설계 및 구현의 생산성을 높이는 데 적합

- 초기 투자 비용

ex. 생성 패턴, 구조 패턴, 행위 패턴

 

 

2. 생성패턴 Creational Pattern

: 객체의 생성과 관련된 패턴으로 이루어짐

-> 객체가 생성되거나 변경되어도 구조에 영향을 받지 않도록 유연성을 더해줌

추상팩토리
Abstract Factory
클래스 의존X 연관/의존 그룹으로 생성해 추상적으로 표현
빌더
Builder
작게 분리된 인스턴스를 건축하듯이 조합하여 객체 생성
팩토리 메소드
Factory Method
객체 생성을 서브클래스에서 하도록 캡슐화한 패턴
상위클래스에서는 전반적인 인터페이스만 정의하고 실제 내용은 서브클래스에서 생성 담당
프로토타입
Prototype
원본객체를 복제하여 사용
싱글톤
Singleton
하나의 객체를 생성하면 생성된 객체를 어디서든 참조 but 여러 프로세스가 동시에 참조할 수는 없다
클래스 내에서 인스턴스가 하나뿐임을 보장

 

 

3. 구조패턴Structural Pattern

: 클래스나 객체들을 조합하여 더 큰 구조로 만들수 있게 해주는 패턴

-> 복잡한 시스템을 개발하기 좋음

어댑터
Adapter
호환성 없는 클래스를 다른 클래스가 이용할 수 있도록 변환
브릿지
Bridge
구현부에서 추상층을 분리하여 서로가 독립적으로 확장
기능과 구현을 두 개의 별도 클래스로 구현
컴포지트
Composite
여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 함
복합 객체 안에 복합 객체가 포함되는 구조 구현 가능
데코레이터
Decorator
객체 간의 결합을 통해 능동적으로 기능 확장
퍼싸드
Facade
더 상위에 인터페이스 구성
플라이웨이트
Flyweight
인스턴스를 필요할 때마다 매번 생성하는 것이 아니고 가능한 공유해서 사용해 메모리 절약
다수의 유사 객체를 생성하거나 조작할 때 유용
프록시
Proxy
접근이 어려운 객체와 연결하려는 객체 사이에서 인터페이스 역할
네트워크 연결, 메모리의 대용량 객체로의 접근 등

 

 

4. 행위패턴 Behavioral Pattern

: 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법 정의

책임 연쇄
Chain of Responsibility
요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
각 객체들이 고리(Chain)로 묶여 있어 요청이 해결될 때까지 고리를 따라 책임이 넘어감
커맨드
Command
요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴
요청에 사용되는 명령어들을 추상클래스와 구체클래스로 분리하여 단순화
인터프리터
Interpreter
언어에 문법 표현을 정의
SQL이나 통신 프로토콜 개발
반복자
Iterator
접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴
내부 표현 방법의 노출 없이 순차적 접근
중재자
Mediator
수많은 객체들 간의 복잡한 상호작용을 캡슐화하여 객체로 정의
객체 사이의 의존성을 줄여 결합도 감소
중재자는 객체 간의 통제와 지시의 역할 수행
메멘토
Memento
특정 시점에서의 객체 내부 상태를 객체화
Ctrl+z와 같은 되돌리기 가능 개발
옵서버
Observer
한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달
분산된 시스템 간 이벤트를 생성/발행하고 이를 수신
상태
State
객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
객체 상태를 캡슐화하고 이를 참조
전략
Strategy
동일한 계열의 알고리즘들을 개별적으로 캡술화하여 상호 교환
독립적으로 원하는 알고리즘을 선택하여 사용 -> 클라이언트에 영향 없이 알고리즘의 변경 가능
템플릿 메소드
Template Method
상위 클래스에서 골격을 정의히고 하위 클래스에서 세부처리를 구체화하는 패턴
방문자
 Visitor
각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성하는 패턴
분리된 처리 기능은 각 클래스를 방문(Visit)하여 수행