소프트웨어 아키텍처
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)하여 수행 |
'자격증 > 정보처리기사 필기 - 개념' 카테고리의 다른 글
[정보처리기사 필기] 제1과목 소프트웨어 설계 - 인터페이스 설계 (0) | 2025.04.30 |
---|---|
[정보처리기사 필기] 제1과목 소프트웨어 설계 - 화면 설계 (1) | 2025.04.16 |
[정보처리기사 필기] 제1과목 소프트웨어 설계 - 요구사항 확인 (2) | 2025.04.15 |
정보처리기사 필기 시험 출제 과목 및 범위 (0) | 2025.04.15 |