출처 : 정보처리기사 필기 기출문제 및 CBT 2022년 04월 24일(2회)(해설집 포함)
1과목 : 소프트웨어 설계
UML 다이어그램 중 순차 다이어그램
1. 객체 간의 동적 상호작용을 시간 개념을 중심으로 모델링 하는 것이다.
2. 행위 다이어그램이므로 동적이고 순차적인 표현을 위한 다이어그램이다.
3. 일반적으로 다이어그램의 수직 방향이 시간의 흐름을 나타낸다.
4. 회귀 메시지(Self-Message), 제어블록(Statement block) 등으로 구성된다.
메시지 지향 미들웨어(Message-Oriented Middleware, MOM)
- 메시지 기반의 비동기형 메시지를 전달하는 방식의 미들웨어
- 온라인 업무보다는 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용
1. 다소 느리고 안정적인 응답이 필요한 온라인 업무에 적합하다.
2. 독립적인 애플리케이션을 하나의 통합된 시스템으로 묶기 위한 역할을 한다.
3. 송신측과 수신측의 연결 시 메시지 큐를 활용하는 방법이 있다.
4. 상이한 애플리케이션 간 통신을 비동기 방식으로 지원한다.
익스트림 프로그래밍
1. 애자일 방법론 중 하나이다.
2. 소규모 개발 조직이 불확실하고 변경이 많은 요구를 접하였을 때 적절한 방법이다.
3. 익스트림 프로그래밍을 구동시키는 원리는 상식적인 원리와 경험을 최대한 끌어 올리는 것이다.
4. 구체적인 실천 방법을 정의하고 있으며, 개발 문서 보다는 소스코드에 중점을 둔다.
유스케이스(Use Case)의 구성 요소 간의 관계 : 연관/포함/확장/일반화
- 연관 관계(Association) : 유스케이스와 액터간의 상호작용이 있음을 표현한다.
- 포함 관계(Include): 하나의 유스케이스가 다른 유스케이스의 실행을 전제로 할 때 형성되는 관계이다.
- 확장 관계(Extend): 확장 기능 유스케이스와 확장 대상 유스케이스 사이에 형성 되는 관계이다.
- 일반화 관계(Generalization) : 유사한 유스케이스 또는 액터를 모아 추상화한 유스케이스 또는 액터와 연결시켜 그룹을 만들어 이해도를 높이기 위한 관계이다.
요구사항 분석에서 비기능적(Nonfunctional) 요구
기능적 요구사항 Vs 비기능적 요구사항
- 기능적 요구사항 : 시스템이 실제로 어떻게 동작하는지에 관점을 둔 요구사항
- 비기능적 요구사항 : 시스템 구축에 대한 성능, 보안, 품질, 안정 등에 대한 성능, 보안, 품질, 안정성등으로 실제 수행에 보조적인 요구사항
- 차량 대여 시스템이 제공하는 모든 화면이 3초 이내에 사용자에게 보여야 한다' 는 성능에 해당 하므로 비기능적 요구사항에 해당한다.
정보공학 방법론에서 데이터베이스 설계의 표현으로 사용하는 모델링 언어
: Entity-Releationship Diagram
Uml 다이어그램 : Package Diagram, State Transition Diagram, Deployment Diagram
미들웨어 Middleware 에 대한 설명
1. 여러 운영체제에서 응용 프로그램들 사이에 위치한 소프트웨어이다.
2. 미들웨어 솔루션은 미들웨어의 서비스 이용을 위해 사용자가 정보 교환 방법 등의 내부 동작을 확인할 필요가 없으며, 오히려 보안의 위협이 될 수 있으므로 확인할 수 없도록 해야 한다.
3. 소프트웨어 컴포넌트를 연결하기 위한 준비된 인프라 구조를 제공한다.
4. 여러 컴포넌트를 1대 1, 1대 다, 다대 다 등 여러 가지 형태로 연결이 가능하다.
- 클라이언트와 서버 간의 통신을 담당하는 시스템 소프트웨어이다.
- 이기종 하드웨어, 소프트웨어, 네트워크, 프로토콜, PC 환경, 운영체제 환경 등에서 시스템 간의 표준화된 연결을 도와주는 소프트웨어이다.
- 표준화된 인터페이스를 통하여 시스템 간의 데이터 교환에 있어 일관성을 제공한다.
- 운영체제와 애플리케이션 사이에서 중간 매개 역할을 하는 다목적 소프트웨어이다.
UI의 설계 지침
사용자 중심 : 사용자가 이해하기 쉽고 편하게 사용할 수 있는 환경을 제공해 실 사용자에 대한 이해가 바탕이 되어야 함
일관성 : 버튼이나 조작 방법을 사용자가 기억하기 빠르고 쉽게 습득할 수 있도록 설계해야 함
단순성 : 조작 방법은 가장 간단하게 작동되도록 하여 인지적 부담 최소화
결과 예측 가능 : 작동시킬 기능만 보고도 결과 예측이 가능해야 함
가시성 : 주요 기능을 메인 화면에 노출하여 쉬운 조작이 가능해야 함
표준화 : 디자인을 표준화하여 기능 구조의 선행 학습 이후 쉽게 사용 가능해야 함
접근성 : 사용자의 직무, 연령, 성별 등이 고려된 다양한 계층을 수용해야 함
명확성 : 사용자가 개념적으로 쉽게 인지해야함
오류 발생 해결 : 사용자가 오류에 대한 상황을 정확하게 인지할 수 있어야 함!
객체지향 개념에서 다형성(Poylmorphism)과 관련한 설명
1. 다형성은 현재 코드를 변경하지 않고 새로운 클래스를 쉽게 추가할 수 있게 한다.
2. 다형성이란 여러 가지 형태를 가지고 있다는 의미로, 여러 형태를 받아들일 수 있는 특징을 말한다.
3. 메소드 오버라이딩(Overriding)은 상위 클래스에서 정의한 일반 메소드의 구현을 하위 클래스에서 무시하고 재정의할 수 있다.
4. 메소드 오버로딩(Overloading)의 경우 매개 변수 타입은 다르지만 메소드명을 같게 함으로써 구현, 구분할 수 있다!
오버로딩 - 같은 이름의 메소드를 중복하여 정의하는것
오버로딩 - 한 클래스 내에서 메서드의 이름은 동일하지만 매개변수의 수나 타입을 다르게 하여 재정의 하는 것
오버라이딩 - 상속관계에서만 발생. 슈퍼클래스의 메서드를 서브클래스에서도 동일한 메서드를 재정의 하는 것
소프트웨어 개발 영역을 결정하는 요소
4. 인터페이스(Interface)
: 서로 다른 두 시스템이나 소프트웨어 등을 서로 이어주는 부분 또는 접속장치를 의미함
- 소프트웨어에 의해 간접적으로 제어되는 장치와 소프트웨어를 실행하는 하드웨어
- 기존의 소프트웨어와 새로운 소프트웨어를 연결하는 소프트웨어
- 순서적 연산에 의해 소프트웨어를 실행하는 절차
1. 기능(Function)
2. 성능(Performance)
3. 제약 조건(Constraint)
객체에 대한 설명
1. 객체는 상태, 동작, 고유 식별자를 가진 모든 것이라 할 수 있다.
2. 클래스는 공통 속성을 공유하는 객체들의 집합이다!
3. 객체는 필요한 자료 구조와 이에 수행되는 함수들을 가진 하나의 독립된 존재이다.
4. 객체의 상태는 속성값에 의해 정의된다.
속성과 관련된 연산Operation을 클래스 안에 묶어서 하나로 취급하는 것을 의미하는 객체지향 개념은 Encapsulation이다
클래스: 하나 이상의 유사한 객체들을 묶는다.
캡슐화: 서로 관련성이 많은 데이터들과 연산들을 묶는다.
상속(Inheritance) : 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스(자식 클래스)가 물려받는 것
클래스: 하나 이상의 유사한 객체들을 묶는다.
캡슐화(Encapsulation): 서로 관련성이 많은 데이터들과 연산들을 묶는다.
연관관계 (Association) : 2개 이상의 사물이 서로 관련되어 있음을 표현한다.
Agile 프로세스 모델
1. 자세한 계획보다는 변화에 대한 대응을 중심으로 소프트웨어를 개발한다!
2. 프로세스와 도구 중심이 아닌 개개인과의 상호소통을 통해 의견을 수렴한다.
3. 협상과 계약보다는 고객과의 협력을 중시한다.
4. 문서 중심이 아닌, 실행 가능한 소프트웨어를 중시한다.
애자일 개발 프로세스 : 개발에 대한 개념적 방법론으로, 개발 프로젝트 기간을 짧은 주기로 나눠 반복적인 개발을 하는 것이 특징
1. 고객관점의 효율적이고 민첩한 변화 대응을 중시
[애자일 선언문]
" 프로세스, 도구보다는 (사람과의 상호작용)을
광범위한 문서보다는 (실제 작동하는 제품)을
계약 협상보다는 (고객 협력)을
계획을 따르기 보다는 (변화 대응)을"
명백한 역할을 가지고 독립적으로 존재할 수 있는 시스템의 부분으로 넓은 의미에서는 재사용되는 모든 단위라고 볼 수 있으며, 인터페이스를 통해서만 접근할 수 있는 것은 Component이다.
컴포넌트
- 프로그래밍에 있어 재사용이 가능한 각각의 독립된 모듈
- 특정 기능 수행을 위해 독립적으로 분리
1. Model
2. Sheet
3. Component!
4. Cell
GoF(Gang of Four) 디자인 패턴을 생성, 구조, 행동 패턴의 세 그룹으로 분류할 때, 구조 패턴이 아닌 것은
1. Adapter 패턴
2. Bridge 패턴
3. Builder 패턴! 은 생성패턴이다.
4. Proxy 패턴
[구조패턴]
-어댑터
-브릿지
-컴포지트
-데코레이터
-퍼싸트
-플라이웨이트
-프록시
[해설작성자 : 아기재혁]
★ 생성패턴 : 객체를 생성하는 것에 대한 패턴
- 추상 팩토리 패턴(abstract factory), 빌더 패턴(builder), 팩토리 메소드 패턴(factory method), 프로토타입 패턴(prototype), 싱글톤 패턴(singleton)
★ 구조패턴 : 구조를 통해 확장성을 꾀하는 패턴
- 어댑터 패턴(adapter), 브릿지 패턴(bridge), 컴포지트 패턴(composite), 데코레이터 패턴(decorator), 퍼사드 패턴(facade), 플라이웨잇 패턴(flysweight), 프록시 패턴(proxy)
★ 행위 패턴 : 행위의 변경, 수정 등을 위한 패턴
- 역할 사슬 패턴(책임 연쇄, chain of reposibility), 커맨드 패턴(command), 인터프리터 패턴(interpreter), 이터레이터 패턴(반복자, iterator), 미디에이터 패턴(중재자, mediator), 메멘토 패턴(memento), 옵저버 패턴(observer), 상태 패턴(state), 전략 패턴(strategy), 템플릿 메소드 패턴(template method), 비지터 패턴(방문자, visitor)
[해설작성자 : ㅈㅇㅎ]
UI 기본개념
1. Feedback : 시스템의 상태와 사용자의 지시에 대한 효과를 보여주어 사용자가 명령에 대한 진행상황과 표시된 내용을 해석할 수 있도록 도와주는 것.
처리된 결과를 측정하고 목표에 도달되었는가를 검사하며 불충분할 경우 다시 입력하는 요소로 사용한다.
2. Posture
3. Module
4. Hash
UI 종류
1. GUI(Graphical User Interface)
2. OUI(Organic User Interface)
3. NUI(Natural User Interface) : Multi-touch, Gesture Recognition 등 자연스러운 움직임을 인식하여 서로 주고 받는 정보를 제공하는 사용자 인터페이스
4. CLI(Command Line Interface)
사용자 인터페이스(UI, User Interface)의 구분
- CLI(Command Line Interface) : 텍스트 형태 인터페이스
- GUI(Graphical User Interface) : 마우스로 선택하여 작업하는 그래픽 환경 인터페이스
- NUI(Natural User Interface) : 사용자의 말이나 행동으로 기기 조작하는 인터페이스
- VUI(Voice User Interface) : 사람의 음성으로 기기 조작하는 인터페이스
- OUI(Organic User Interface) : 모든 사물과 사용자 간의 상호작용을 위한 인터페이스
소프트웨어 모델링
1. 모델링 작업의 결과물은 다른 모델링 작업에 영향을 줄 수 있다! ex) 유스케이스 명세로부터 필요한 요소들을 가져와 도메인 모델로 정리할 수 있음(..?)
2. 구조적 방법론에서는 DFD(Data Flow Diagram), DD(Data Dictionary) 등을 사용하여 요구 사항의 결과를 표현한다.
3. 객체지향 방법론에서는 UML 표기법을 사용한다.
4. 소프트웨어 모델을 사용할 경우 개발될 소프트웨어에 대한 이해도 및 이해 당사자 간의 의사소통 향상에 도움이 된다.
Use Case Diagram에 관련된 내용
1. 시스템과 상호작용하는 외부시스템은 액터로 파악해도 된다!
2. 유스케이스는 사용자 측면에서의 요구사항으로, 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술한다.
3. 시스템 액터는 다른 프로젝트에서 이미 개발되어 사용되고 있으며, 본 시스템과 데이터를 주고받는 등 서로 연동되는 시스템을 말한다.
4. 액터가 인식할 수 없는 시스템 내부의 기능을 하나의 유스케이스로 파악해서는 안된다.
액터 : 시스템과 상호작용하는 모든 것(사람, 기계, 시스템 등), 시스템과 상호작용하는 모든 외부요소, 사람이나 외부 시스템을 의미
소프트웨어 아키텍쳐 모델 중 Model-View-Controller와 관련한 설명
1. MVC 모델은 사용자 인터페이스를 담당하는 계층의 응집도를 높일 수 있고, 여러 개의 다른 UI를 만들어 그 사이에 결합도를 낮출 수 있다.
2. 모델(Model)은 뷰(View)와 제어(Controller) 사이에서 전달자 역할을 하며, 뷰마다 모델 서브시스템이 각각 하나씩 연결된다.
3. 뷰(View)는 모델(Model)에 있는 데이터를 사용자 인터페이스에 보이는 역할을 담당한다.
4. 제어(Controller)는 모델(Model)에 명령을 보냄으로써 모델의 상태를 변경할 수 있다.
한 개의 모델에 대해 여러 개의 뷰를 만들 수 있음.
모델은 서브 시스템의 핵심 기능과 데이터를 보관하며 MVC 패턴에서는 여러 개의 뷰를 만들 수 있으므로 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 어플리케이션에 적합하다 .
전달자 역할은 Model이 아닌 제어Controller다.
2과목 : 소프트웨어 개발
통합 테스트(Integration Test)와 관련한 설명
1. 시스템을 구성하는 모듈의 인터페이스와 결합을 테스트하는 것이다.
2. 하향식 통합 테스트의 경우 넓이 우선(Breadth First) 방식으로 테스트를 할 모듈을 선택할 수 있다.
3. 하향식 통합 테스트의 경우 시스템 구조도의 최상위에 있는 모듈을 먼저 구현하고 테스트한다!
4. 모듈 간의 인터페이스와 시스템의 동작이 정상적으로 잘되고 있는지를 빨리 파악하고자 할 때 상향식 보다는 하향식 통합 테스트를 사용하는 것이 좋다.
상향식 통합 테스트 (Bottom Up Integration Test)
- 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합
- 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터(Cluster)필요
하향식 통합 테스트 (Top Down Integration Test)
- 상위 모듈에서 하위 모듈 방향으로 통합
- 깊이 우선 통합법, 넓이 우선 통합법 사용
- 초기부터 사용자에게 시스템 구조를 보여줌
다음과 같이 레코드가 구성되어 있을 때, 이진 검색 방법으로 14를 찾을 경우 비교되는 횟수 : 3회
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
이진 탐색 동작 방식
1. 전체 배열의 중간 값을 찾음
2. 중간 값과 검색 값을 비교
2-1. 중간 값이 검색 값과 같으면 끝.
2-2. 중간 값보다 검색 값이 크다면 오른쪽 구간을 탐색
2-3. 중간 값보다 검색 값이 작다면 왼쪽 구간을 탐색
3.값을 찾거나 간격이 비었을 때까지 반복
☕ JAVA
public class BinarySearchExample {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
int target = 14;
int low = 0;
int high = arr.length - 1;
int mid;
int comparisons = 0;
for (int i = 0; i < arr.length; i++) {
mid = (low + high) / 2;
comparisons++;
if (arr[mid] == target) {
System.out.println("찾고자 하는 값 " + target + "을(를) 찾았습니다.");
System.out.println("비교 횟수: " + comparisons);
break;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
if (low > high) {
System.out.println("찾고자 하는 값 " + target + "이(가) 배열에 존재하지 않습니다.");
System.out.println("비교 횟수: " + comparisons);
break;
}
}
}
}
🐍 Python
### 주어진 배열
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
### 찾고자 하는 값
target = 14
def binary_search(arr, target):
low, high = 0, len(arr) - 1
comparisons = 0
while low <= high:
mid = (low + high) // 2
comparisons += 1
if arr[mid] == target:
print(f"찾고자 하는 값 {target}을(를) 찾았습니다.")
print(f"비교 횟수: {comparisons}")
return
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
print(f"찾고자 하는 값 {target}이(가) 배열에 존재하지 않습니다.")
print(f"비교 횟수: {comparisons}")
### 이진 검색 호출
binary_search(arr, target)
소프트웨어 공학에서 워크스루(Walkthrough)에 대한 설명
1. 사용사례를 확장하여 명세하거나 설계 다이어그램, 원시코드, 테스트 케이스 등에 적용할 수 있다.
2. 복잡한 알고리즘 또는 반복, 실시간 동작, 병행 처리와 같은 기능이나 동작을 이해하려고 할 때 유용하다.
3. 인스펙션(Inspection)과 동일한 의미를 가지지 않음!
4. 단순한 테스트 케이스를 이용하여 프로덕트를 수작업으로 수행해 보는 것이다.
워크스루: 요구사항 명세서 작성자를 포함하여 사전 검토한 후에 짧은 검토 회의를 통해 결함을 발견
인스펙션: 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하면서 결함을 발견
소프트웨어의 개발과정에서 소프트웨어의 변경사항을 관리하기 위해 개발된 일련의 활동은 형상관리이다.
1. 복호화
2. 형상관리
3. 저작권
4. 크랙
복호화 - 디코딩, 즉 부호화된 데이터를 부호화 되기 전 형태로 바꾸어, 사람이 읽을 수 있는 형태로 되돌려 놓는것
저작권 - 창작물을 만든이가 자기 저작물에 대해 가지는 법적권리
크랙 - 소프트웨어를 수정하여 소프트웨어를 크랙하는 사람이 원하지 않는 기능들, 보통은 수정 방식(복사 보호, 소프트웨어 조작 보호)을 비활성화하거나 제거하는 일
테스트 케이스
1. 테스트의 목표 및 테스트 방법을 결정하고 테스트 케이스를 작성해야 한다!!
2. 프로그램에 결함이 있더라도 입력에 대해 정상적인 결과를 낼 수 있기 때문에 결함을 검사할 수 있는 테스트 케이스를 찾는 것이 중요하다.
3. 개발된 서비스가 정의된 요구 사항을 준수하는지 확인하기 위한 입력 값과 실행 조건, 예상 결과의 집합으로 볼 수 있다.
4. 테스트 케이스 실행이 통과되었는지 실패하였는지 판단하기 위한 기준을 테스트 오라클(Test Oracle)이라고 한다.
Test Case
- 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위해 설계된 입력값, 실행 조건, 기대 결과 등으로 구성된 테스트 항목에 대한 명세서를 의미한다.
- 테스트의 목표 및 테스트 방법을 결정하고 테스트 케이스를 작성해야 한다.
객체지향 개념을 활용한 소프트웨어 구현
1. 객체(Object)란 필요한 자료 구조와 수행되는 함수들을 가진 하나의 독립된 존재이다!
2. JAVA에서 정보은닉(Information Hiding)을 표기할 때 private의 의미는 '접근금지'이다.
3. 상속(Inheritance)은 개별 클래스를 상속 관계로 묶음으로써 클래스 간의 체계화된 전체 구조를 파악하기 쉽다는 장점이 있다.
4. 같은 클래스에 속하는 개개의 객체이자 하나의 클래스에서 생성된 객체를 인스턴스(Instance)라고 한다.
아 계속 쓰면 안 되지..
이런 자료 공유해주신 감사한 분 저작권 보호 차원에서
이 이상은 내컴에 작성하면서 새겨 볼 예정.
(출처는 최상단 링크에!)
기존 문제들과 해석들을 몇 번 눈에 익히고 모의고사 몇 번 치고,
좀더 자세히 알고 싶은 것들은 조사해 볼 계획이다.