2021 시나공 정보처리기사 실기책 참고
주의! 중요도가 낮은 항목(C, D)은 일부 제외
1. 소프트웨어 아키텍처 – B
- SW를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 모듈화, 추상화, 단계적 분해, 정보은닉
- 모듈화
- SW의 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것
- 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 듦
- 너무 크게 나누면 모듈 하나의 개발 비용이 많이 듦
- 추상화
- 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것
- 시스템과 유사한 모델을 만들어서 여러가지 요인들을 테스트 가능
- 유형
- 과정 추상화 : 전반적인 흐름만 파악할 수 있도록 설계
- 데이터 추상화 : 데이터 구조를 대표할 수 있는 표현으로 대체
- 제어 추상화 : 이벤트 발생을 대표할 수 있는 표현으로 대체
- 단계적 분해
- 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
- 하향식 설계 전략
- 포괄적인 기능에서부터 시작해 구체화하고, 알고리즘, 자료 구조 등 상세한 내역은 뒤로 미룸
- 정보 은닉
- 모듈 내부에 포함된 절차와 자료들의 정봐 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 모듈을 독립적으로 수행할 수 있음
- 수정, 시험, 유지보수 용이
- 상위 설계와 하위 설계
비고 |
상위 설계 |
하위 설계 |
별칭 |
아키텍처 설계, 예비 설계 |
모듈 설계, 상세 설계 |
설계 대상 |
시스템의 전체적인 구조 |
시스템의 내부 구조 및 행위 |
세부 목록 |
구조, DB, 인터페이스 |
컴포넌트, 자료구조, 알고리즘 |
- 소프트웨어 아키텍처의 품질 속성
- 품질 평가 요소들을 구체화 시켜 놓은 것
- 시스템 측면 : 성능, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
- 비즈니스 측면 : 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등
- 아키텍처 측면 : 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
- 소프트웨어 아키텍처의 설계 과정
- 설계 목표 설정 -> 시스템 타입 결정 -> 아키텍처 패턴 적용 -> 서브시스템 구체화 -> 검토
- 협약에 의한 설계
- 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 정확한 인터페이스를 명세
조건 |
내용 |
선행 조건 |
오퍼레이션이 호출되기 전에 참이 되어야 할 조건 |
결과 조건 |
오퍼레이션이 수행된 후 만족되어야 할 조건 |
불변 조건 |
오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건 |
2. 아키택처 패턴 – B
- 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- SW 시스템의 구조를 구성하기 위한 기본적인 윤곽 제시
- 서브시스템들과 그 역할이 정의되어 있음
- 레이어 패턴, 클라이언트-서버 패턴, 파이프-필터 패턴, 모델-뷰-컨트롤러 패턴
- 레이어 패턴
- 시스템을 계층으로 구분하여 구성하는 고전적인 방법의 패턴
- 상위 계층은 서비스 제공자, 하위 계층은 클라이언트가 됨
- 서로 마주보는 두 개의 계층 사이에서만 상호작용이 이루어짐
- OSI 참조모델
- 클라이언트-서버 패턴
- 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴
- 파이프-필터 패턴
- 데이터 스트림 절차의 각 단계를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 처리 결과물을 파이프를 통해 전달받아 처리한 후 다시 파이프를 통해 다음 시스템으로 넘겨주는 패턴을 반복
- 데이터 변환, 버퍼링, 동기화 등에 주로 사용
- UNIX의 쉘
- 모델-뷰-컨트롤러 패턴
- 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 핵심 기능과 데이터를 보관하는 모델을 이용해 뷰에 정보를 출력하는 구조
- 여러 개의 뷰를 만들 수 있음
- 대화형 어플리케이션에 적합
- 기타 패턴
- 마스터-슬레이브 패턴
- 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업 수행
- 장애 허용 시스템, 병렬 컴퓨팅 시스템
- 브로커 패턴
- 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 브로커 컴포넌트가 요청에 맞는 컴포넌트와 사용자를 연결
- 분산 환경 시스템
- 피어-투-피어 패턴
- 피어라 불리는 하나의 컴포넌트가 클라이언트가 될수도, 서버가 될 수도 있는 패턴
- 파일 공유 네트워크
- 이벤트-버스 패턴
- 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리
- 알림 서비스
- 블랙보드 패턴
- 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴
- 음성 인식, 차량 식별, 신호 해석
- 인터프리터 패턴
- 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴
- 번역기, 컴파일러, 인터프리터
3. 객체지향 – A
- 각 요소들을 객체로 만든 후, 객체들을 조립해서 SW를 개발하는 기법
- 구조적 기법의 문제점으로 인한 SW 위기의 해결책으로 채택
- 고품질의 SW를 빠르게 개발할 수 있고 유지보수가 쉬움
- 구성요소 : 객체, 클래스, 메시지
- 특징 : 캡슐화, 상속, 다형성, 연관성
- 객체
- 데이터와 이를 처리하기 위한 함수를 묶어 놓은 SW 모듈
- 데이터 : 객체가 가지고 있는 정보, 속성이나 상태, 분류 등
- 함수
- 객체가 수행하는 기능으로 객체가 갖는 데이터를 처리하는 알고리즘
- 객체의 상태를 참조하거나 변경하는 수단
- 클래스
- 공통된 속성과 연산을 갖는 객체의 집합
- 속성과 연산을 정의하고 있는 틀
- 각각의 객체를 인스턴스라고 함
- 메시지
- 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구사항
- 캡슐화
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 외부 모듈의 변경으로 인한 파급 효과가 적음
- 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐
- 상속
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있음
- 새로운 속성과 연산을 첨가하여 사용할 수 있음
- 다형성
- 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
- 동일한 메소드명을 사용하며 같은 의미의 응답을 하는 것
- 연관성
종류 |
의미 |
특징 |
is member of |
연관화 |
2개 이상의 객체가 상호 관련되어 있음 |
is instance of |
분류화 |
동일한 형의 특성을 갖는 객체들을 모아 구성 |
is part of |
집단화 |
관련 있는 객체들을 묶어 하나의 상위 객체를 구성 |
is a |
일반화 |
공통적인 성질들로 추상화한 상위 객체를 구성 |
” |
특수화/상세화 |
상위 객체를 구체화하여 하위 객체를 구성 |
4. 객체지향 분석 및 설계 – A
- 객체지향 분석(OOA)
- 사용자의 요구사항과 관련된 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 클래스를 식별하는 것이 주요 목적
- 객체지향 분석의 방법론
- Rumbaugh
- 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행
- Booch
- 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용
- 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의
- Jacobson
- Coad와 Yourdon
- E-R 다이어그램을 사용하여 객체의 행위를 모델링
- Wirfs-Brock
- 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행
- Rumbaugh의 분석 기법
- 모든 SW 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법(OMT)라고도 함
- 객체 모델링 -> 동적 모델링 -> 기능 모델링 순으로 이루어짐
- 객체 모델링
- 정보 모델링
- 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객채 다이어그램으로 표시
- 동적 모델링
- 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현
- 기능 모델링
- 자료 흐름도를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현
- 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SRP, OCP, LSP, ISP, DIP : SOLID 원칙
- 단일 책임 원칙(SRP) : 객체는 단 하나의 책임만 가져야 함
- 개방-폐쇄 원칙(OCP) : 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 함
- 리스코프 치환 원칙(LSP) : 자식 클래스는 최소한 부모 클래스의 기능은 수행할 수 있어야 함
- 인터페이스 분리 원칙(ISP) : 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 함
- 의존 역전 원칙(DIP) : 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 함
5. 모듈 – A
- 모듈화를 통해 분리된 시스템의 각 기능
- 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미
- 결합도와 응집도에 의해 측정
- 결합도
- 모듈 간에 상호 의존하는 정도
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮음
- 결합도의 종류
- 내용 결합도
- 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하고나 수정할 때
- 공통 결합도
- 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때
- 외부 결합도
- 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때
- 제어 결합도
- 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호나 제어 요소를 전달
- 하위 모듈이 상위 모듈에게 처리 명령을 내리는 권리 전도 현상 발생
- 스탬프 결합도
- 자료 결합도
- 모듈 간의 인터페이스가 자료 요소로만 구성될 때
- 응집도
- 모듈의 내부 요소들이 서로 관련되어 있는 정도
- 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮음
- 응집도의 종류
- 기능적 응집도
- 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
- 순차적 응집도
- 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도
- 교환적 응집도
- 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우
- 절차적 응집도
- 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우
- 시간적 응집도
- 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우
- 논리적 응집도
- 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우
- 우연적 응집도
- 팬인 / 팬아웃
- 팬인 : 어떤 모듈을 제어하는 모듈의 수
- 팬아웃 : 어떤 모듈에 의해 제어되는 모듈의 수
- 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어 있다고 볼 수 있음
- 팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트 필요
N-S 차트
- 논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법
- 박스 다이어그램, Chapin Chart라고도 함
- GOTO나 화살표를 사용하지 않음
- 연속, 선택 및 다중 선택, 반복의 3가지 제어 논리 구조로 표현
- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는 데 적합
6. 공통 모듈 – A
- 여러 프로그램에서 공통으로 사용할 수 있는 모듈
- 자주 사용되는 계산식이나 매번 필요한 사용자 인증과 같은 기능들이 공통 모듈로 구성될 수 있음
- 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수
- 공통 모듈 명세 기법의 종류
- 정확성 : 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성
- 명확성 : 중의적으로 해석되지 않도록 명확하게 작성
- 완전성 : 필요한 모든 것을 기술
- 일관성 : 상호 충돌이 발생하지 않도록 작성
- 추적성 : 요구사항의 출처 등의 관계를 파악할 수 있도록 작성
- 재사용
- 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화
- 비용과 시간을 절약
- 사용법을 공개해야 함
- 재사용 규모에 따른 분류
- 함수와 객체 : 클래스나 메소드 단위의 소스 코드를 재사용
- 컴포넌트 : 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용
- 애플리케이션 : 공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용
- 효과적인 모듈 설계 방안
- 결합도는 줄이고 응집도는 높여서 모듈의 독립성과 재사용성을 높임
- 복잡도와 중복성을 줄이고 일관성을 유지
- 기능은 예측이 가능해야 하며 지나치게 제한적이어서는 안 됨
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해
- 모듈 간의 계층적 관계를 정의하는 자료가 제시되어야 함
7. 코드 – A
- 자료의 분류, 조합, 집계, 추출을 용이하게 하기 위해 사용하는 기호
- 정보를 신속, 정확, 명료하게 전달
- 일정한 규칙에 따라 작성
- 정보 처리의 효율과 처리된 정보의 가치에 많은 영향
- 코드의 주요 기능
- 식별 기능 : 데이터 간의 성격에 따라 구분 가능
- 분류 기능 : 데이터를 그룹화 할 수 있음
- 배열 기능 : 의미를 부여하여 나열할 수 있음
- 표준화 기능 : 데이터를 기준에 맞추어 표현할 수 있음
- 간소화 기능 : 복잡한 데이터를 간소화할 수 있음
- 코드의 종류
- 순차 코드
- 최초의 자료부터 차례로 일련번호를 부여하는 방법
- 1, 2, 3, 4 …
- 블록 코드
- 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여
- 1001~1100 : 총무부
- 10진 코드
- 0~9까진 10진 분할하고, 다시 각각에 대해 10진 분할하는 방법을 반복
- 1000 : 공학, 1100 : SW 공학, 1110 : SW설계
- 그룹 분류 코드
- 코드화 대상 항목을 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분
- 1-01-001 : 본사-총무부-인사계
- 연상 코드
- 코드화 대상 항목의 명칭이나 약호와 관계있는 숫자, 문자, 기호를 이용
- TV-40 : 40인치 TV
- 표의 숫자 코드
- 대상 항목의 성질의 물리적 수치를 그대로 코드에 적용시키는 방법
- 120-720-1500 : 두께x폭x길이가 120x720x1500인 강판
- 합성 코드
- 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합
8. 디자인 패턴 – A
- 모듈 간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 효율적
- 생성, 구조, 행위 패턴
- 생성 패턴
- 클래스나 객체의 생성과 참조 과정을 정의하는 패턴
- 추상 팩토리
- 인터페이스를 통해 서로 연관, 의존하는 객체들의 그룹으로 생성하여 추상적으로 표현
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능
- 빌더
- 인스턴스를 건축 하듯이 조합하여 객체를 생성
- 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있음
- 팩토리 메소드
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당
- 가상 생성자 패턴
- 프로토타입
- 원본 객체를 복제하는 방법으로 객체를 생성
- 일반적인 방법으로 객체를 생성, 비용이 큰 경우 주로 이용
- 싱글톤
- 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수 없음
- 클래스 내에서 인스턴스가 하나뿐임을 보장하며, 불필요한 메모리 낭비 최소화 가능
- 구조 패턴
- 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴
- 어댑터
- 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환
- 기존의 클래스를 이용하고 싶지만 인터페이스가 일치하지 않을 때 이용
- 브리지
- 구현부에서 추상층을 분리해, 서로가 독립적으로 확장할 수 있도록 구성
- 기능과 구현을 두 개의 별도 클래스로 구현
- 컴포지트
- 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용
- 객체들을 트리 구조로 구성하여 디렉터리 안에 디렉터리가 있듯이 복합 객체 안에 복합 객체가 포함되는 구조를 구현할 수 있음
- 데코레이터
- 객체 간의 결합을 통해 능동적으로 기능들을 확장할 수 있음
- 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현
- 퍼싸드
- 복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있도록 함
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요
- 플라이웨이트
- 인스턴스를 가능한한 공유해서 사용함으로써 메모리를 절약
- 다수의 유사 객체를 생성하거나 조작할 때 유용하게 사용
- 프록시
- 접근이 어려운 객체와 연결하려는 객체 사이에서 인터페이스 역할을 수행
- 네트워크 연결, 메모리의 대용량 객체로의 접근 등에 주로 이용
- 행위 패턴
- 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴
- 책임 연쇄
- 요청을 처리할 수 있는 객체가 둘 이상 존재
- 요청이 해결될 때까지 고리를 따라 책임이 넘어감
- 커맨드
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남김
- 요청에 사용되는 각종 명령어들을 추상 클래스와 구체 클래스로 분리하여 단순화
- 인터프리터
- 언어에 문법 표현을 정의하는 패턴
- SQL이나 통신 프로토콜과 같은 것을 개발할 때 사용
- 반복자
- 자료 구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 함
- 내부 표현 방법의 노출 없이 순차적인 접근 가능
- 중재자
- 객체들 간의 복잡한 상호작용을 캡슐화하여 객체로 정의
- 객체 사이의 의존성을 줄여 결합도를 감소시킬 수 있음
- 메멘토
- 특정 시점에서의 객체 내부 상태를 객체화함으로써 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능 제공
- Ctrl Z와 같은 되돌리기 기능을 개발할 때 주로 이용
- 옵서버
- 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달
- 일대다의 의존성을 정의
- 분산 시스템 간 이벤트를 생성, 발행하고 이를 수신해야 할 때 이용
- 상태
- 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용
- 객체 상태를 캡슐화하고 이를 참조하는 방식으로 처리
- 전략
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의
- 클라이언트는 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경 가능
- 템플릿 메소드
- 상위 클래스에서 골격을 정의하고, 하위 클래스에서 세부 처리를 구체화하는 구조
- 유사한 서브 클래스를 묶어 공통된 내용을 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해줌
- 방문자
- 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성
- 분리된 처리 기능은 각 클래스를 방문하여 수행
9. 배치 프로그램 – A
- 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램
- 필수 요소
- 대용량 데이터
- 자동화
- 견고성
- 안정성/신뢰성
- 성능
- 배치 스케줄러
- 일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
- 스프링 배치
- Spring Source사와 Accenture사가 공동 개발
- 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통게 등의 기능 제공
- Quartz
- 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공
- 요소들을 분리하여 일괄 처리 작업에 유연성 제공
- Cron
- 리눅스의 기본 스케줄러 도구
- crontab 명령어를 통해 작업을 예약할 수 있음
- crontab 명령어 작성 방법
- 분, 시, 일, 월, 요일에 *를 입력하면 매 시기마다 수행
- 시기 우측에 /단위를 입력하면 시기를 단위로 나눈 나머지가 0일 때마다 명령어 수행
- 시작 시기 - 종료 시기를 통해 특정 구간에만 반복하여 명령어 실행
- 시기1, 시기2, 시기3을 통해 특정 시기에 명령어를 실행
댓글남기기