[정보처리기사 요약] 1과목 소프트웨어 설계 – 3장 애플리케이션 설계

2022 시나공 정보처리기사 필기 참고하여 요약한 내용입니다. 1과목 소프트웨어 설계의 3장 애플리케이션 설계에서 중요한 내용들을 중심으로 정리했습니다. 요약인 만큼 내용이 부족할 수 있을 수 있으니 참고해주세요.

3장 애플리케이션 설계

21. 소프트웨어 아키텍처 : 소프트웨어의 골격이 되는 기본 구조, 원칙과 지침, 의사소통 도구,

설계는 좋은 품질을 유지하면서 비기능적 요구사항으로 나타난 제약 반영,

기능적 요구사항을 구현하는 방법을 찾는 해결 과정

소프트웨어 아키텍처 설계의 기본 원리 : 모듈화, 추상화, 단계적 분해, 정보은닉

1) 모듈화(Modularity) : 시스템의 기능들을 모듈 단위로 나누는 것, 재사용성 향상

2) 추상화(Abstraction) : 포괄적인 개념을 설계한 후 세분화하여 구체화, 최소 비용으로 실제 상황 대처

– 추상화의 유형

* 과정 추상화

* 데이터 추상화

* 제어 추상화

3) 단계적 분해(Stepwise Refinement) : 하향식 설계 전략, 추상화의 반복으로 세분화, 상세한 내역은 가능한 한 뒤로 미룸

4) 정보 은닉(Information Hiding) : 자료의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법,

독립적, 수정, 시험, 유지보수 용이

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

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

– 비지니스 측면 : 시장 적시성, 비용과 혜택, 예상 시스템 수명

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

협약에 의한 설계 : 선행 조건, 결과 조건, 불변 조건

22. 아키텍처 패턴 : 아키텍처를 설계할 때 참조할 수 있는 예제

종류 : 레이어 패턴, 클라이언트-서버 패턴, 파이프-필터 패턴, 모델-뷰-컨트롤러 패턴 등

1) 레이어 패턴 : 시스템을 계층으로 구분하여 구성, 상위 계층은 서비스 제공자, 하위 계층은 클라이언트 변경 작업이 용이,

OSI 참조 모델

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

서버는 항상 대기 상태를 유지해야 함

클라이언트나 서버는 동기화되는 경우를 제외하고는 서로 독립적

3) 파이프-필터 패턴 : 각 단계를 필터 컴포넌트로 캡슐화, 파이프를 통해 데이터 전송, 재사용성이 좋고, 확장이 용이,

오버헤드 발생, UNIX의 쉘

4) 모델-뷰-컨트롤러 패턴 : 서브시스템을 3개의 부분으로 구조화, 개별 작업 수행 가능, 대화형 애플리케이션에 적합

– 모델 : 핵심 기능과 데이터 보관

– 뷰 : 정보 표시

– 컨트롤러 : 받은 입력 처리

5) 기타 패턴

– 마스터-슬레이브 패턴 : 장애 허용 시스템, 병렬 컴퓨팅 시스템

– 브로커 패턴 : 분산 환경 시스템

– 피어 투 피어 패턴 : 멀티스레딩 방식

– 이벤트 버스 패턴

– 블랙보드 패턴 : 음성 인식, 차량 식별, 신호 해석

– 인터프리터 패턴

23. 객체지향 : 객체들을 조립해서 작성할 수 있는 기법, 재사용 용이, 확장 용이, 유지보수 쉬움, 병렬처리, 모형화, 이해 쉬움

구성 요소와 개념 : 객체, 클래스, 캡슐화, 상속, 다형성, 연관성

1) 객체 : 데이터와 함수를 캡슐화한 하나의 소프트웨어 모듈

– 특성 : 독립적으로 식별 가능한 이름을 가짐, 상태는 시간에 따라 변함, 관계 형성됨, 메시지의 집합(행위),

일정한 기억 장소를 가짐, 메소드는 메시지를 받았을 때 정해진 기능을 수행

2) 클래스 : 공통된 속성과 연산을 갖는 객체의 집합, 추상화 단위, 객체는 인스턴스, 객체 생성은 인스턴스화

3) 캡슐화 : 데이터와 함수를 하나로 묶는 것, 재사용 용이, 결합도가 낮아짐

4) 상속 : 하위 클래스는 상위 클래스의 모든 속성과 연산을 바로 사용 가능, 새로운 속성과 연산 첨가 가능, 재사용을 높임,

다중 상속

5) 다형성 : 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 함,

6) 연관성 : 두 개 이상의 객체들이 상호 참조하는 관계

– 종류

is member of : 연관화

is instance of : 분류화

is part of : 집단화

is a : 일반화, 특수화/상세화

24. 객체지향 분석 및 설계

1) 객체지향 분석(OOA) : 요구사항을 분석하여 모델링 하는 작업, 목적은 객체 인스턴스화와 클래스 식별

2) 객체지향 분석 방법론

– Rumbaugh(럼바우) 방법 : 일반적으로 사용, 객체 모델, 동적 모델, 기능 모델로 나누어 수행

– Booch(부치) 방법 : 미시적과 거시적을 모두 사용하는 분석 방법

– Jacobson 방법 : Use Case 강조

– Coad와 Yourdon 방법 : E-R 다이어그램 사용

– Wirfs-Brock 방법

3) 럼바우의 분석 기법 : 객체 모델링 기법(OMT)

분석 순서 : 객체 모델링 -> 동적 모델링 -> 기능 모델링

– 객체 모델링 : 정보 모델링, 객체 다이어그램

– 동적 모델링 : 상태 다이어그램, 시간 흐름 중심

– 기능 모델링 : 자료 흐름도(DFD), 자료 흐름 중심

4) 객체지향 설계 원칙(SOLID 원칙)

– 단일 책임 원칙(SRP) : 객체는 단 하나의 책임만 가져야한다, 응집도는 높고, 결합도는 낮게

– 개방-폐쇄 원칙(OCP) : 기존 코드를 변경하지 않고 기능 추가, 캡슐화

– 리스코프 치환 원칙(LSP) : 자식 클래스는 부모 클래스를 재정의하지 않고 확장만 수행

– 인터페이스 분리 원칙(ISP) : 인터페이스가 갖는 하나의 책임, 사용하지 않는 인터페이스의 영향을 받지 않아야 한다

– 의존 역전 원칙(DIP) : 추상성이 높은 클래스와 의존 관계를 맺어야 한다

25. 모듈 : 재사용 가능, 기능적 독립성, 결합도는 약하게 응집도는 강하게 모듈의 크기는 작게

1) 결합도 : 모듈 간에 상호 의존하는 정도, 연관 관계

<결합도 정도 순서> 약 -> 강

– 자료 결합도(Data Coupling) : 자료 요소로만 구성

– 스탬프 결합도(Stamp Coupling) : 자료 구조가 전달될 때

– 제어 결합도(Control Coupling) : 제어 요소를 전달, 권리 전도현상

– 외부 결합도(External Coupling) : 외부의 다른 모듈에서 참조할 때

– 공통 결합도(Common Coupling) : 공통 데이터 영역을 여러 모듈이 사용할 때

– 내용 결합도(Content Coupling) : 다른 모듈의 내부 기능을 직접 참조하거나 수정할 때

2) 응집도 : 정보 은닉을 확장, 모듈의 내부 요소들이 서로 관련되어 있는 정도

<응집도 정도 순서> 강 -> 약

– 기능적 응집도(Functional Cohesion) : 모듈의 기능 요소들이 단일 문제와 연관될 때

– 순차적 응집도(Sequential Cohesion) : 출력 데이터를 입력 데이터로 사용할 경우

– 교환적 응집도(Communication Cohesion)

– 절차적 응집도(Procedural Cohesion) : 모듈 안의 구성 요소들이 기능을 순차적으로 수행할 경우

– 시간적 응집도(Temporal Cohesion) : 특정 시간에 처리되는 기능을 모아서 모듈로 작성할 경우

– 논리적 응집도(Logical Cohesion) : 유사한 성격의 요소들로 하나의 모듈이 형성되는 경우

– 우연적 응집도(Coincidental Cohesion) : 서로 관련 없는 요소로만 구성된 경우

3) 팬인/팬아웃 : 시스템 복잡도

– 팬인 : 모듈을 호출하는 모듈의 수, 높으면 재사용 용이, 단일 장애점 발생 가능, 중점적인 관리 및 테스트 필요

– 팬아웃 : 모듈에 의해 호출되는 모듈의 수, 높으면 단순화 시킬 수 있는 지 검토

* 시스템의 복잡도를 최적화하려면 팬인은 높게 팬아웃은 낮게 설계

** N-S차트 : 논리의 기술에 중점을 둔 도형 이용한 표현, 박스 다이어그램, 제어 논리 구조 표현, 화살표 사용하지 않음

26. 공통 모듈 : 여러 프로그램에서 공통적으로 사용할 수 있는 모듈, 사용자 인증이나 계산식 같은 기능

– 공통 모듈 구현할 때 준수해야할 명세 기법 : 정확성, 명확성, 완전성, 일관성, 추적성

1) 재사용 : 대상은 외부 모듈과의 결합도는 낮고 응집도는 높아야 함

– 규모에 따른 분류 : 함수와 객체, 컴포넌트, 애플리케이션

2) 효과적인 모듈 설계 방안

– 결합도는 줄이고 응집도를 높여서 모듈의 독립성과 재사용성을 높임

– 복잡도와 중복성은 줄이고 일관성은 유지

– 모듈 크기는 이해하기 쉬운 크기로 분해

– 하나의 입구와 하나의 출구

– 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료 제시

27. 코드 : 컴퓨터를 이용하여 자료를 처리하는 과정, 정보를 신속 정확 명료하게 전달

– 주요 기능 : 식별 기능(데이터 성격에 따라 구분), 분류 기능(데이터 그룹화), 배열 기능, 표준화 기능, 간소화 기능

1) 코드의 종류

– 순차 코드(Sequence Code) : 차례로 일련 번호를 부여하는 방법, 순서 코드, 일련번호 코드

– 블록 코드(Block Code) : 공통성이 있는 것끼리 블록으로 구분, 구분 코드

– 10진 코드(Decimal Code) : 10진 분할, 도서 분류식 코드

– 그룹 분류 코드 : 일정 기준에 따라 대분류 중분류 소분류 등으로 구분, 각 그룹 안에서 일련번호 부여

– 연상 코드(Mnemonic Code) : 명칭이나 약호와 관계있는 숫자나 문자, 기호를 이용하여 코드 부여

– 표의 숫자 코드(Significant Digit Code) : 물리적 수치를 코드에 적용, 유효 숫자 코드

– 합성 코드(Combined Code) : 2개 이상의 코드를 조합

28. 디자인 패턴 : 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형저인 해결 방식 또는 예제,

문제 및 배경, 실제 적용된 사례, 재사용이 가능한 샘플 코드 등으로 구성,

개발 과정 중에 문제가 발생하면 문제에 해당하는 디자인 패턴을 참고하여 적용하는 것이 효율적,

– 장단점 : 범용적인 코딩 스타일, 구조 파악이 용이, 생산성이 높아짐, 개발 시간과 비용 절약, 초기 투자비용 부담,

개발자 간의 원활한 의사소통 가능, 객체지향을 기반으로 한 설계와 구현을 다뤄서 다른 기반 개발엔 부적합

1) 생성 패턴(Creational) : 객체의 생성과 참조 과정을 캡슐화, 프로그램이 유연해짐

– 추상 팩토리(Abstract Factory) : 객체들을 그룹으로 생성하여 추상적으로 표현

– 빌더(Builder) : 인스턴스를 건축하듯이 조합하여 객체 생성

– 팩토리 메소드(Factory Method) : 캡슐화, 서브 클래스, 가상 생성자(Virtual Constructor) 패턴

– 프로토타입 : 원본 객체 복제하여 생성

– 싱글톤(Singleton) : 클래스 내에서 인스턴스가 하나뿐임을 보장, 불필요한 메모리 낭비 최소화

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

– 어댑터(Adapter) : 호환성이 없는 클래스의 인터페이스를 변환해줌

– 브리지(Bridge) : 구현부에서 추상층 분리하여 서로가 독립적으로 확장할 수 있도록 구성

– 컴포지트(Composite) : 객체들을 트리구조로 구성, 복합 객체와 단일 객체 구분 없이 다룸

– 데코레이터(Decorator) : 객체 결합을 통해 능동적으로 기능들을 확장

– 퍼씨드(Facade) : 서브 클래스들의 기능을 간편하게 사용, Wrapper 객체가 필요

– 플라이웨이트(Flyweight) : 인스턴스를 가능한 공유해서 사용함으로써 메모리를 절약

– 프록시(Proxy) : 객체와 객체 사이에서 인터페이스 역할

3) 행위 패턴(Behavioral) : 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴

– 책임 연쇄(Chain of Responsibility) : 객체들이 고리로 묶여있어 요청이 해결될 때까지 고리를 따라 책임이 넘어감

– 커맨드(Command) : 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴

– 인터프리터(Interpreter) : 언어에 문법 표현을 정의

– 반복자(Iterator) : 접근이 잦은 객체에 대해 동일한 인터페이스를 사용

– 중재자(Mediator) : 객체들 간의 상호작용을 캡슐화하여 객체로 정의, 객체간의 통제와 지시의 역할

– 메멘토(Memento) : 되돌리기 기능

– 옵서버(Observer) : 한 객체의 상태가 변하면 상속되어 있는 다른 객체들에게 변화된 상태를 전달

– 상태(State) : 객체의 상태에 따라 동일한 동작을 다르게 처리

– 전략(Strategy) : 동일한 계열의 알고리즘을 개별적으로 캡슐화하여 상호호환할 수 있게 정의

– 템플릿 메소드(Template Method) : 상위 클래스에서 골격 정의, 하위 클래스에서 세부 처리를 구체화

– 방문자(Visitor) : 클래스들에서 처리 기능을 분리하여 별도의 클래스도 구성

[정보처리기사 요약] 1과목 소프트웨어 설계 – 2장 화면 설계
[정보처리기사 요약] 1과목 소프트웨어 설계 – 4장 인터페이스 설계

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top