1.소프트웨어 설계 - 애플리케이션설계

Wintering·2022년 2월 13일
0

정보처리기사

목록 보기
3/3

3. 애플리케이션 설계

3-1. 소프트웨어 아키텍쳐

: 소프트웨어를 구성하는 요소들간의 관계를 표현하는 시스템의 구조 또는 구조체

  • 비기능적 요구사항으로 나타난 제약을 반영 / 기능적 요구사항을 구현
  • 기본원리
    • 모듈화
    • 추상화
    • 단계적분해
    • 정보은닉

3-1-※ 상위 설계와 하위 설계

상위 설계하위 설계
별칭아키텍쳐 설계, 예비 설계모듈 설계, 상세 설계
설계 대상시스템의 전체적인 구조시스템의 내부 구조 및 정의
세부 목록구조, DB, 인터페이스컴포넌트, 자료구조, 알고리즘

3-1-1 모듈화

: 성능향상 , 소프트웨어의 수정 및 재사용, 유지 관리등이 용이하도록 시스템의 기능을 모듈 단위로 나눔

  • 모듈을 작게 나누면 → 모듈 간 통합 비용 多 / 모듈으 크게 나누면 → 하나의 개발 비용 多

3-1-2 추상화

: 전체적이고 포괄적 개념 설계 → 세분화 하며 구체화

  • 완전한 시스템 구축 이전에, 유사한 모델을 만들어서 기능 테스트
    • 과정 추상화 : 전반적 흐름 파악
    • 데이터 추상화 : 데이터 구조 파악 (세부적 속성이나 용도 정의 X)
    • 제어 추상화 : 대표할 수 있는 표현으로 대체 (이벤트 발생 등을 정의 X)

3-1-3 단계적 분해

: 하향식 설계 전략

  • 추상화의 반복에 의해 세분화 됨
  • 소프트웨어의 기능 → 알고리즘 → 자료구조 →.... (상세한 내용일수록 뒤로 미뤄짐)

3-1-4 정보은닉

: 한 모듈 내에서 포함된 절차와 정보가 감추어져, 다른 모듈이 이를 변경하지 못하게함

  • 모듈을 독립적으로 수행할 수 있음 (하나의 모듈이 변경 되더라도 다른 모듈에 영향을 주지 X)
  • 수정, 시험, 유지보수 용이

3-1-5 소프트웨어 아키텍쳐의 품질속성

시스템 측면
- 성능 / 변경용이성 / 사용성 / 기능성 / 가용성 / 확장성 / 보안
- <u>***성능**을 **변경**했더니 용량 **사기가**를 **확보**했다.*</u>
비즈니스 측면
  • 시장 적시성 / 비용과 혜택 / 예상 시스템 수명 / 기타 속성
아키텍쳐 측면
  • 개념적 무결성(구성 요소들의 일관성 유지) / 정확성 완결성 / 구축 가능성 / 기타 속성

3-1-6. 소프트웨어 아키텍쳐의 설계과정

  1. 설계목표설정

  2. 시스템 타입 결정

  3. 아키텍쳐 패턴 적용

  4. 서브시스템 구체화

  5. 검토

    ※. 시스템 타입 / 협약에 의한 설계 : 선행 조건, 결과 조건, 불변 조건 을 포함한 효과적 설계

    • ㅇ대화형 시스템 / 이벤트 중심 시스템 / 변환형 시스템 / 객체 영속형 시스템

3-2. 아키텍쳐 패턴

: 아키텍쳐를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제

3-2-1. 레이어 패턴
  • 시스템을 계층 구분 하는 고전적 방법
  • 상위 계층 (서비스 제공자) , 하위 계층 (클라이언트)
  • 두개의 계층 사이에서만 상호 작용이 이루어져 변경 작업 용이 (특정 계층 만을 교체해서 시스템 개선하는 것이 가능)
  • ex) OSI 참조 모델
3-2-3 클라이언트-서버 패턴
  • 하나의 서버 : 다수의 클라이언트 컴포턴트 (사용자는 클라이언트와 소통, 클라이언트는 서버에 요청)
  • 서버는 클라이언트의 요청을 대비해서 항상 대기 상태를 유지해야한다. (응답과정을 위해 동기화 될 때를 빼고는 독립적인 관계)
3-2-3 파이프-필터 패턴
  • 데이터 스트림 절차의 각 단계를 컴포넌트로 캡슐화하여 파이프를 통해 데이터를 전송
  • 재사용성 ↑ / 데이터변환, 버퍼링, 동기화 등에 주로 사용
  • ex) UNIX의 쉘(Shell)
3-2-4 MVC 패턴
  • 모델 : 서브시스템의 핵심 기능과 데이터 보관
  • 뷰 : 사용자에게 정보를 표시
  • 컨트롤러 : 사용자로부터 입력받은 입력을 처리
  • 각각은 서로의 영향을 받지 않고 개발 작업을 수행할 수 있다.
  • ex) 한개의 모델에 여러개의 뷰를 필요로 하는 대화형 애플리케이션에 적합
3-2-5 마스터-슬레이브패턴
  • 마스터 컴포넌트 : 모든 작업의 주체 / 슬레이브 컴포넌트 : 마스터의 지시에 따라 작업을 수행하고 결과를 반환
  • ex) 장애 허용 시스템, 병렬 컴퓨터 시스템에 활용
3-2-6 브로커 패턴
  • 사용자가 원하는 특성을 브로커에 요청하고, 브로커가 연결해줌, 원격 서비스 호출에 응답하는 컴포넌트가 여러 개일때 적합
  • ex) 분산환경 시스템에 주로 활용
3-2-7 피어 투 피어패턴
  • 피어 : 하나의 컴포넌트 / 각 피어는 서비스를 호출하는 클라이언트or서버 무엇이든 될 수 있다.
  • ex)전형적인 멀티 스레드 방식
3-2-8 이벤트-버스 패턴
  • 소스가 특정 이벤트 메세지를 발행, 구독자들이 메세지를 받아 처리
3-2-9 블랙보드 패턴
  • 모든 컴포넌트가 공유 데이터 저장소와 블랙보드 컴포넌트에 접근, 검색을 통해 원하는 데이터를 찾을 수 있음
  • 해결책이 명확하지 않을 때 사용하기 좋음
  • ex) 음성 인식, 차량 식별, 신호 해석 등등
3-2-10 인터프리터 패턴
  • 프로그램 코드의 각 라인에 수행 방법을 지정, 기호마다 클래스를 구성

3-3. 객체지향(Object-Oriented)

  • 유지보수 용이, 멀티미디어 데이터 및 병렬 처리를 지원

3-3-1 객체

  • 데이터와 데이터를 처리하는 함수를 묶어놓은 하나의 소프트웨어 모듈
  • 데이터 : 속성, 상태 변수, 상수, 자료 구조
  • 함수 : 메소드, 서비스, 동작, 연산
    • 객체는 독립적으로 식별 가능한 이름을 가진다
    • 객체가 가질 수 있는 상태는 시간에 따라 변화한다
    • 객체와 객체는 상호 연관성에 의한 관계가 형성된다
    • 객체가 반응하는 메세지의 집합 = 행위, 객체는 행위의 특징을 나타낸다
    • 객체는 일정한 기억장소를 가진다

3-3-2 클래스

  • 객체들이 갖는 속성과 연산을 정의하고 있는 틀이자 데이터를 추상화 하는 단위
  • 클래스에 속한 각각의 객체는 인스턴스라고 부르며 새로운 객체를 생성하는 것을 인스턴스화 라고함

3-3-3 캡슐화

  • 인터페이스를 제외한 세부 내용이 은폐되어 외부의 접근이 제한저가, 외부 모듈에 영향을 적게 받음
  • 재사용이 용이, 객체간의 결합도를 낮게한다

3-3-4 상속

  • 하위클래스는 상위클래스의 모든 속성과 연산을 자신의 속성으로 사용 가능
  • 하위클래스는 상속받은 이외의 새로운 속성과 연산을 첨가 가능
  • 소프트웨어 재사용을 높이는 중요한 개념이다

3-3-5 다형성

  • 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한

    인스턴스처럼 수행할 수 있게함

3-3-6 연관성

종류의미특징
is member of연관화(Association)2개 이상의 객체가 상호 관련됨
is instance of분류화(Classification)동일한 형의 특성을 갖는 객체들을 모아서 구성
is part of집단화(Aggregation)관련 있는 객체를 묶어 상위 객체 구성
is a일반화 / 특수화,상세화상위 객체를 구체화하여 하위 객체를 구성

3-4. 객체지향 분석 및 설계

3-4-1 방법론

3-4-1-1 럼바우기법(: 객체 모델링 기법(OMT)) / ✏️객동기

: 객체 모델링 → 동적 모델링 → 기능 모델링

모델링종류의미
객체 모델링(Object Modeling)정보 모델링, 요구되는 객체를 찾아 속성과 연산 식별 및 객체들 간의 관계를 규정하여
객체 다이어그램으로 표시
동적 모델링(Dynamic Modeling)상태 다이어그램을 이용, 시간의 흐름에 따른 객체들의 행위를 표현
기능 모델링(Functional Modeling)자료흐름도(DFD)를 이용, 자료흐름을 중심으로 처리과정을 표현
3-4-1-2 부치방법
  • 미시적 / 거시적으로 나뉨, 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의
3-4-1-3 Jacobson방법
  • UseCase를 사용하여 분석
3-4-1-4 Coad와 Yourdon 방법
  • E-R 다이어그램사용 / 객체 식별, 구조 식별, 구조 정의, 속성과 인스턴스의 연결 정의, 연산과 메시지 연결 정의 등
3-4-1-5 Wrifs-Brock 방법
  • 분석과 설계의 구분X / 고객 명세서를 평가해서 설계까지 연속 수행

3-4-2 객체지향설계원칙(✏️SOLID)

  • SRP (Solo Resopsibility Principle) : 객체는 단 하나의 책임만 가짐, 응집도↑ 결합도↓
  • OCP(Open Closed Principle) : 코드 변경 없이 기능 추가 가능하도록 설계, 캡슐화가 대표적
  • LSP(Liscok Substitution Principle) : 상속에 관한 내용
  • ISP(Interface Segregation Principle) : 자신이 사용하지 않는 인터페이스와는 관계를 맺지 X,
  • DIP(Dependency Inversion Principle) : 의존 관계가 성립할 때, 추상성이 낮은 클래스보단 추상성이 높은 클래스와 의존관계 on

3-5. 모듈

3-5-1 결합도(✏️자스제외공내)

  • 결합되는 모듈 간의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계

  • 자스민을 제외외가 결합했다

    결합도↓ 결합도↑

    자료결합도 → 스탬프결합도 → 제어결합도 → 외부결합도 → 공통결합도 → 내용결합도

    • 자료결합도 : 모듈 간 인터페이스가 자료요소로만 구성
    • 스탬프 결합도 : 모듈 간 인터페이스가 자료 구조가 전달될 때의 결합도
    • 제어 결합도 : 논리적 흐름 제어를 위해 제어신호를 이용하여 통신하거나 제어 요소를 전달
    • 외부 결합도 : 어떤 모듈에서 선언한 데이터를 외부 다른 모듈에서 참조할 때의 결합도
    • 공통 결합도 : 공유 되는 공통데이터 영역을 여러 모듈이 사용
    • 내용 결합도 : 한 모듈이 다른 모듈의 내부 기능 및 내부 자료를 직접 참조하건 수정

3-5-2 응집도(✏️기순교절시논우)

  • 모듈이 독립적인 긴으으로 정의되어 있는 정도를 의미

    응집도↑ 응집도↑

    기능적 → 순차적 → 교환적 → 절차적 → 시간적 → 논리적 → 우연적

    • 기능적 응집도 : 모든 기능 요소들이 단일 문제와 연결되어 수행
    • 순차적 응집도 : 모듈 하나의 출력 데이터를, 그 다음 활동의 입력 데이터로 사용할 경우
    • 교환적 응집도 : 동일한 입출력을 사용하여, 서로 다른 기능을 수행하는 구성 요소들이 모인 경우
    • 절차적 응집도 : 다수를 순차적으로 수행할 경우 응집도
    • 시간적 응집도 : 특정 시간에 처리되는 몇개의 기능을 모은 경우
    • 논리적 응집도 : 유사한 성격을 갖거나 특정 형태로 분류되는 경우
    • 우연적 응집도 : 서로 관련없는 요소들로만 구성된 경우

3-5-3 팬인 팬아웃

  • 팬인 : 어떤 모듈을 제어하는 모듈의 수
  • 팬아웃 : 어떤 모듈에 의해 제어되는 모듈의 수
  • 팬인↑ 재사용 측면에서 설계가 잘되어 있다, 단일장애점이 높을 수 있다.
  • 팬아웃↑ 불필요하게 다른 모듈을 호출하는 건 아닌지 검토필요
  • 팬인은 높고, 팬아웃은 낮을 수록 좋다

3-5-4 N-S차트

: 논리 기술에 중점을 둔 도형을 이용한 표현 방법. 박스 다이어그램, Chapin Chart 등

  • 연속, 선택 및 다중 선택, 반복 등의 논리구조표현
  • GOTO나 화살표를 사용X
  • 시각적으로 명확히 식별하는데 적합, (선택과 반복구조를 시각적으로 표현)
  • 총체적인 구조 표현과 인터페이스를 나타내기는 어려움
  • 작성이 어렵고, 임의로 제어를 전의하는 것이 불가능

3-6. 공통모듈 (✏️완전(정)~명일추)

: 공통적으로 사용할 수 있는 모듈을 의미 (ex. 로그인 기능, 자주 사용되는 계산식 등)

  • 명세 기법을 준수해야함

    종류의미
    완전성(Completeness)시스템 구현을 위해 필요한 모든 것을 구현
    정확성(Correctness)시스템 구현시 해당기능이 필요함을 정확히 작성
    명확성(Clarity)중의적 해석이 되지 않도록 명확히 작성
    일관성(Consistency)공통 기능들 간 상호 충돌이 발생하지 않도록 작성
    추적성(Traceablilty)기능에 대한 관계를 파악할 수 있도록 작성
  • 재사용

    • 함수와 객체 : 소스코드 재사용
    • 컴포넌트 : 인터페이스 재사용
    • 애플리케이션 : 애플레케이션을 공유하여 재사용

3-7. 코드 (✏️간식 분배표)

  • 간소화 기능
  • 식별 기능
  • 분류 기능
  • 배열 기능
  • 표준화 기능

3-7-1. 코드의 종류

종류의미
순차코드(Sequence Code)순서 등 일정기준에 따라 차례로 일련번호 부여 ex) 1,2,3,4...
블록 코드(Block Code)공통성이 있는 것끼리 블록으로 구분, 각 블록 내에서 일련번호 부여
ex) 1001 ~ 1100 총무부, 1101 ~ 1200 : 영업부
10진 코드(Decimal Code)0~9까지 10진분할 , 도서 분류식 코드라고도 함
ex) 1000 : 공학, 1100 : 소프트웨어 공학, 1110 : 소프트웨어설계
그룹 분류 코드(Group Classification Code)대분류,중분류,소분류로 구분하고 각 그룹 안에 일련번호 부여
연상 코드(Mnemonic Code)코드화 대상 항목 명칭이나 약호와 관계있는 숫자, 문자, 기호 등
ex) TV-40 : 40인치 TV
표의 숫자 코드(Signification Digit Code)길이,넓이,부피,지름,높이 등의 물리적 수치 표현
ex) 120x720x1500 상판
합성 코드(Combined Code)2개이상의 코드를 조합

3-8. 디자인패턴

  • 모듈의 세분화된 역할이나 인터페이스 같은 코드를 작성하는 수준의 세부 구현 방안을 설계할 때 참조하는
    전형적인 해결 방식 또는 예제
  • 문제 및 배경, 실제 적용 된 사례, 재사용이 가능한 샘플코드로 구성

: GoF 디자인 패턴 ( 생성패턴 5개 , 구조패턴 7개 , 행위 패턴 11개)

  • 구조파악이 용이하고, 생산성을 높이는데 적합하며, 재사용을 통해 시간과 비용이 절감된다
  • 초기 투자 비용은 부담될 수 있으며, 객체 지향 기반이 아닌 애플리케이션 개발엔 적합하지 X

3-8-1. 생성 패턴(Creation Pattern) ✏️빌더 추상 싱글 프메

  • 빌더추상적인 싱글 프-메
종류의미
빌더(Builder)인스턴스를 건축하듯이 조립하여 객체 생성
생성과정과 표현방법을 분리, 동일한 환경에서도 서로 다른 결과
추상 팩토리(Abstract Factory)클래스에 의존 X, 인터페이스를 통해 연관 된 객체들을 그룹으로 생성해 추상적 표현
연관 된 서브 클래스를 한번에 묶어서 교체가 가능
싱글톤(Singleton)하나의 객체를 어디서든 참조 가능하지만, 여러가지가 동시에 참조는X
클래스 내에 인스턴스가 하나뿐임을 보장
프로토타입(Prototype)원본 객체를 복제하여 객체 생성
팩토리 메소드(Factory Method)객체 생성을 서브 클래스에 처리하도록 분리하여 캡슐화한 패턴
가상 생성자 패턴이라고도 함
상위클래스에서 객체를 생성하고 인터페이스를 정의, 하위에서 인스턴스를 생성

3-8-2. 구조 패턴(Structural Pattern) ✏️컴프브 데어퍼플

  • 컴퓨(프)터 이름은 데어퍼플
종류의미
컴포지트(Composite)복합 객체와 단일 객체를 구분없이 다루고자할때,
트리구조를 구성하여 복합 객체 안에 복합객체가 포함되는 구조 표현
프록시(Proxy)접근이 어려운 객체와 연결하려는 객체 사이의 인터페이스 역할
ex) 네트워크 연결, 메모리 대용량 객체의 접근
브릿지(Bridge)구현부의 추상층을 분리, 서로가 독립적으로 확장할 수 있도록 구성
기능과 구현을 두개의 별도 클래스로 구분 (다리 한쪽은 기능~ 다리 한쪽은 구현~)
데코레이터(Decorator)객체간 결합으로 능동적으로 기능을 확장
부가기능 추가를 위해 다른 객체를 덧붙이는 방식
어댑터(Adaptor)호환성이 없는 클래스의 인터페이스를 다른 클래스가 이용할 수 있게 변환
기존에 구현되어 있는 클래스에 기능 발생시 키존 클래스를 재사용 할수 있도록 중간에서 맞춰줌
퍼싸드(Facade)상위에 인터페이스를 구성, 서브 클래스를 간편히 가용 가능하게함
Wrapper 클래스 필요
플라이웨이트(Flyweight)가능한 한 공유해서 사용함으로써 메모리를 절약, 다수의 유사 객체 생성 및 조작시 유용

3-8-3. 행위 패턴(Behavior Pattern)

  • 책임연쇄(Chain of Responsibility) : 요청이 해결될 때 까지 고리를 책임에 따라 넘긴다
  • 커맨드(Command) : 요청을 캡슐화하여 재이용하거나, 취소할 수 있도록 필요한 정보를 저장 혹은 로그에 남김
  • 인터프리터(Interpreter) : 언어와 문법 표현을 정의 / SQL 등
  • 반복자(Iterator) : 자료 구조와 같이 접근이 잦은 때 동일한 인터페이스를 사용하도록함
  • 중재자(Mediator) : 상호작용을 캡슐화하여 객체로 정의하는 패턴, 객체간의 통제와 지시 역할 수행
  • 메멘토(Memento) : 특정 시점에서 객체 내부 상태를 개체화, 이전 상태로 돌릴 수 있는 기능
  • 옵서버(Observer) : 한 객체의 상태 변화를 ,상속된 다른 객체들에게 전달하는 패턴 / 이벤트 생성과 발생 등
  • 상태(State) : 동일한 동작을 다르게 사용해야할때 사용
  • 전략(Strategy) : 동일한 계열의 알고리즘을 개별적으로 캡슐화. 알고리즘의 선택 사용, 클라이언트에 영향 X
  • 템플릿메소드(Template method) : 상위에서 골격 정의, 하부에서 세부처리 구체화 / 유지보수 용이
  • 방문자(Visitor) : 처리기능을 분리하여 별도 클래스로 생성

0개의 댓글