[정보처리기사_필기] 1-3. 애플리케이션설계 - 1

팔랑이·2023년 6월 27일
0

정보처리기사

목록 보기
5/20
post-thumbnail

21. 소프트웨어 아키텍처 (⭐️⭐️⭐️⭐️)

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

소프트웨어의 골격이 되는 기본 구조, 소프트웨어 구성 요소 관계 표현하는 구조

기본원리: 모듈화, 추상화, 단계적분해, 정보은닉

상위 설계

  • 아키텍처 설계, 예비 설계
  • 설계 대상: 시스템 전체적 구조
  • 세부 목록: DB, 구조, 인터페이스

하위 설계

  • 모듈 설계, 상세 설계
  • 대상: 시스템 내부 구조 및 행위
  • 세부목록: 컴포넌트, 자료구조, 알고리즘

2) 모듈화

소프트웨어 성능 향상 또는 유지보수 용이하게 하기 위해 기능을 모듈단위로 나눔

3) 추상화(Abstraction)

전체, 포괄적 -> 세분화하여 구체화

추상화의 유형 (제과자)

  • 과정 추상화: 자세한 과정 정의 X, 전반적 흐름만 설계
  • 데이터 추상화
  • 제어 추상화: 이벤트 발생의 정확한 절차나 방법 정의 X, 대표 표현으로 대체

👉🏻 깡통 리모콘 만들어놓고(업다운 기능만) 이를 에어컨 리모콘, TV 리모콘, 선풍기 리모콘 등 다양한 형태로 구체화

4) 단계적 분해

5) 정보 은닉

모듈 내부의 절차, 자료에 대한 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 함 -> 모듈 독립적 수행, 다른모듈 영향 X로 수정 시험 유지보수 용이

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

품질 유지 및 보장할수있게 설계되었는지 확인하기 위한 품질 평가 요소들을 시스템, 비즈니스, 아키텍처 측면으로 구분하여 구체화

  • 시스템 측면: 성능, 보안, 가용성, 기능성, 사용성, 변경용이성, 확장성, 테스트용이성, 배치성, 안전성 등 (성능변경사기가확보)
  • 비즈니스 측면: 시장 적시성, 비용, 혜택, 예상 시스템 수명, 기타 속성
  • 아키텍처 측면: 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성, 적응성, 일치성, 대체성

7) 소프트웨어 아키텍처 설계 과정

시스템 타입

  • 대화형 시스템
  • 이벤트 중심 시스템: 외부의 상태변화에 따라 동작 (전화, 비상벨 등)
  • 변환형 시스템: 컴파일러 등
  • 객체 영속성 시스템: 데이터베이스 사용 (서버관리 소프트웨어 등)

협약에 의한 설계
: 컴포넌트 설계 시 클래스에 대한 여러 가정 공유할 수 있도록 명세

  • 선행 조건
  • 결과 조건
  • 불변 조건

22. 아키텍처 패턴 (⭐️⭐️⭐️⭐️)

1) 개요

아키텍처 패턴: 아키텍처 설계 시 참고할 수 있는 전형적 해결방식 또는 예제

레이어 패턴, 클라이언트-서버 패턴, 파이프-필터 패턴, 모델-뷰-컨트롤러 패턴이 있다

2) 레이어 패턴

  • 시스템을 레이어로 구분하여 구성하는 고전적 방법
  • 상위계층은 서비스 제공자, 하위계층은 클라이언트
  • 마주보는 두 계층 사이에서만 상호작용 -> 변경작업용이
  • 대표적 예시) OSI 참조 모델

3) 클라이언트-서버 패턴

  • 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴

4) 파이프-필터 패턴 ⭐️⭐️

서브시스템이 입력데이터 받아 처리하고 결과를 다음 서브시스템으로 넘김

  • 데이터 스트림: 데이터가 송수신되거나 처리되는 일련의 연속적 흐름
  • 파이프라인: 필터, 파이프 통해 처리되는 일련의 처리과정
  • 데이터 스트림 절차의 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 데이터 전송
  • 재사용성이 좋고 추가가 쉬움
  • 필터 재배치하여 다양한 파이프라인 구축 가능
  • 데이터 변환, 버퍼링, 동기화 등에 주로 사용
  • 필터간 데이터 이동시 데이터 변환으로 인한 오버헤드 발생
    ** 오버헤드: 처리시 발생하는 간접적인 처리시간, 메모리 등
  • 대표적 예시) UNIX의 쉘(Shell)

5) 모델-뷰-컨트롤러

6) 마스터-슬레이브 패턴

  • 일반적으로 실시간 시스템에서 사용
  • 연산, 통신, 조정을 책임짐
  • 마스터가 슬레이브 프로세스들을 제어

23. 객체지향 (⭐️⭐️⭐️⭐️)

1) 개요

✓ 구조적 기법: 하나의 큰 작업을 여러개의 작은 작업으로 분할, 각각의 모듈을 작성한 후 이들을 한곳에 모아 큰 작업 수행하여 하나의 완벽한 프로그램으로 만드는 기법

"프로그램 = 데이터 + 함수"

문제점: 유지보수 고려 X, 개발 시작 이후 추가 요구사항에 대응 어려움, 재사용 어려움

객체지향

  • 재사용 및 확장 용이, 유지보수 쉬움
  • 구조적 기법의 문제점 해결
  • 복잡한 구조를 단계적, 계층적으로 표현

"객체 = 데이터 + 함수, 프로그램 = 객체 + 객체"

2) 객체

데이터와 데이터 처리 함수 묶어놓은 하나의 소프트웨어 모듈

  • 데이터: 객체가 가지고 있는 정보, 속성, 상태, 변수, 상수, 자료구조라고도 함
  • 함수: 객체의 데이터를 처리하는 알고리즘, 메소드, 서비스, 동작, 연산 등이 있음

객체의 특성

  • 객체가 가질 수 있는 조건을 상태(State) 라고 하는데, 일반적으로 상태는 시간에 따라 변한다
  • 상호 연관성에 의한 관계 형성
  • 행위의 특징을 나타낼 수 있음
  • 일정한 기억장소 가지고 있음
  • 객체의 메소드는 다른 객체로부터 메시지 받았을 때 정해진 기능 수행

3) 클래스

공통된 속성과 연산(행위) 갖는 객체의 집합으로, 객체의 일반적인 타입을 의미

  • 하나 이상의 유사한 객체를 묶어 하나의 공통된 특성 표현
  • 데이터를 추상화하는 단위
  • 클래스 안의 각각의 객체를 인스턴스라고 함

4) 캡슐화 (Encapsulation)

데이터(속성)와 데이터 처리 함수를 하나로 묶는 것

  • 캡슐화된 객체는 내부정보가 숨겨져 외부의 변경으로 인한 파급효과 적음
  • 재사용 용이
  • 알약같이 필요한 서로 다른 약들을 조합하여 캡슐에 담아놓음

👉🏻 private var a / get, set 을 사용하는 것이 캡슐화 하는 것

5) 상속

상위클래스의 모든 속성과 연산을 하위클래스가 물려받음

  • 하위클래스는 상속받은 연산 외에 새 속성과 연산 추가하여 사용 가능
  • 소프트웨어의 재사용도를 높이는 중요한 개념
  • 다중 상속: 한개의 클래스가 두개이상의 상위클래스로부터 상속받는 것

6) 다형성 (다양한 형태)

  • 오버로딩: 똑같은거 여러개 만드는데 여러 인자를 만듦
  • 오버라이딩: 상속관계에서만 존재, 상속받은 메소드를 재정의

7) 연관성

두 개 이상의 클래스들이 상호 참조하는 관계

  • 연관화: 2개이상 객체가 상호 관련
  • 분류화: 동일한 형의 특성 갖는 객체 모아 구성
  • 집단화(is part of): 관련 있는 객체 묶어 하나의 상위객체 구성, 부분-전체 관계 또는 부분의 관계로 설명되는 연관성 나타냄
  • 일반화: 공통 성질로 추상화한 상위객체 구성
  • 특수화/상세화: 상위객체 구체화해 하위객체 구성

24. 객체지향 분석 및 설계 (⭐️⭐️⭐️⭐️)

1) 객체지향 분석(OOA; Object Oriented Analysis)

사용자의 요구사항 분석하여 요구된 문제와 관련된 모든 클래스(객체), 속성과 연산, 관계 등을 정리해 모델링하는 작업

2) 분석 방법론

✓ 럼바우 방법: 가장 일반적, 분석활동을 객체모델, 동적모델, 기능모델로 나눠 수행
✓ 부치 방법: micro/macro한 개발 프로세스 모두 사용하는 분석 방법
✓ Jacobson 방법: 유스케이스 강조하여 사용하는 분석 방법
✓ Coad Yourdon 방법: E-R 다이어그램 사용해 객체 행위 모델링
✓ Wirfs-Brock 방법: 분석과 설계 간 구분 없고, 고객명세서 평가해 설계작업까지 연속적 수행

3) 럼바우(Rumbaugh) 기법 ⭐️⭐️⭐️

모든 소프트웨어 구성요소를 그래픽 표기법 이용해 모델링, 객체 모델링 기법(OMT)이라고도 함.
객체 모델링 -> 동적 모델링 -> 기능 모델링 순으로 이루어짐 (객동기)

  • 객체 모델링: 정보 모델링이라고도 함. 시스템에서 요구되는 객체 찾아내 속성과 연산 식별 및 객체들간의 관계 규정해 객체 다이어그램으로 표시
    ✓ 객체 다이어그램: 객체와 객체 간의 관계 그래픽으로 표현

  • 동적 모델링: 상태 다이어그램 이용해 시간의 흐름에 따른 객체들간의 제어흐름, 상호작용, 동작순서 등 동적 행위 표현하는 모델링
    ✓ 상태 다이어그램: 객체 상태가 시간에 따라 변하는 것을 그래픽으로 표현

  • 기능 모델링: 자료흐름도(DFD) 이용해 다수의 프로세스 간의 자료 흐름을 중심으로 처리과정 표현한 모델링

4) 객체지향 설계 원칙 ⭐️⭐️

SOLID 원칙이라고도 함. 시스템 변경이나 확장에 유연한 시스템 설계 위해 지켜야 할 다섯가지 원칙

  • 단일책임원칙(Single...): 객체는 단 하나의 책임만 가짐. 응집도 높고 결합도 낮게 설계
  • 개방-폐쇄원칙(Open...): 기존코드 변경 없이 기능 추가할수 있도록 설계. 대표적-> 공통인터페이스를 하나로 묶어 캡슐화.
  • 리스코프 치환원칙(Liskov...): 자식클래스는 최소한 자기 부모클래스에서 가능한 행위는 수행할 수 있어야 함. 부모클래스 책임 무시하거나 재정의 X, 확장만 수행하도록
  • 인터페이스 분리원칙(Interface...): 사용하지 않는 인터페이스와 의존관계 맺거나 영향받지 않아야 함. 인터페이스가 갖는 하나의 책임
  • 의존역전원칙(Dependency...): 객체 간 의존관계 성립시, 추상성 높은 클래스와 의존관계 맺어야 함.

참고 도서 📚
2022 시나공 정보처리기사 필기

profile
정체되지 않는 성장

0개의 댓글