카테고리 없음

(주간컴공) 제1과목 소프트웨어 설계 / 어플리케이션 설계

web_seul 2022. 4. 21. 23:05

S1. 어플리케이션 설계

1. 소프트웨어 아키텍처

  1) SW 아키텍처 : 기본구조(동일한 아키텍처: 기본 구조가 같은 여러형태의 결과물), 개발기반, 품질유지, 원칙, 지침

  2) 모듈화 원리 : 유지관리에 좋음(많으면 통합비용증가, 적으면 개발비용증가)

  추상화 : 과정(흐름), 구조(데이터), 제어(이벤트) / 포괄적 개념, 반복할수록 구체화, 가성비, 구조파악 용이

  - 단계적 분해 : 하향식, 추상화의 반복으로 더 많은 단계 분해가능

  - 정보은닉 : 접근금지, 별도의 인터페이스 사용, 유지보수에 용이

  3) 품질속성 : 시스템(성능, 보안), 비즈니스(비용, 자원), 아키텍처(결함)

  4) 설계과정 : 목표 - 시스템타입(대화형, 이벤트형, 변호나형, 객체영속형) - 아키텍처패턴(미리 만들어둔 공식) - 시스템구체화 - 검토

 

2. 아키텍처 패턴(=아키텍처 스타일, 표준 아키텍처) : 문제 해결의 윤곽제시, 원칙과 지침역할

   장점 : 시간단축, 품질향상, 검증편리, 소통원활, 이해용이, 예측 가능 등

  - 레이어(계층)패턴 : 각각의 상하위 계층과만 소통

  - 클라이언트 서버 패턴 : 클라이언트(다수, 자원요청), 서버(항시대기, 자원제공)은 각각 독립적 동작

  - 파이프 필터 패턴 : 필터 - 데이터 처리, 캡슐화(정보은닉) : 재사용성, 확장성으로 다양한 파이프라인 생성가능, 데이터변환, 버퍼링, 동기화 작업에 유리

  - 모델 뷰 컨트롤러 패턴 : 어플리케이션에 적합

  - 마스터 슬레이브 패턴 : 마스터(명령), 슬레이브(병렬처리, 취합, 몇몇이 고장나도 문제x)

  - 브로커 패턴 : 클라이언트의 요청을 브로커가 적절한 서버로 연결, 여러개의 서버, 분산환경 시스템

  - 피어투피어 패턴(p2p) : 서버와 클라이언트가 역할을 바꿀수 있는 형태(자원요청<->자원제공), 토렌트, 웹하드, 두가지 일을 병렬로 수행하는 멀티스레딩

  - 이벤트 버스패턴 : 이벤트 발생시 여러 리스너가 이벤트 처리

  - 블랙보드 패턴 : 공유데이터를 관리하는 블랙보드에 접근하여 원하는 데이터를 가짐, 음성인식, 차량식별, 신호해석 등

 

3. 객체지향 : (객체 : 결과물 통칭), 각 객체들이 서로 메시지를 보내며 기능 및 데이터사용 요청, 결과를 돌려주면서 프로그램 진행

절차(구조적)지향

프로그램을 하나의 큰 절차(순서)로 구성
데이터 상수 90
변수 score=90
배열 score={90,80,70}
구조체 student={name="a", score="90"}
기능 실행문 밥을 먹는다
분기문(조건제어) if(true) 밥을 먹는다 else 밥을 안먹는다
반복문(루프문)  
함수 원할때만

 

1)  클래스 : 데이터와 기능을 묶어서 캡슐화한 것, 재사용, 확장(유지보수) 용이

  - 인스턴스 : 클래스 재사용을 위한 복제결과물 (과정: 인스턴스화)

   - 상속 : 확장(유지보수), 하위클래스는 상위클래스+자신의 요소까지 모두 사용 가능

2) 다형성 : 객체지향의 최종 목표, 클래스의 상속을 통해 확장되어 생성된 인스턴스에 기능제한으로 특정기능만 수행가능한 것

주간컴공

 

4. 모듈 : 모듈화된 기능(=서브루틴, 서브시스템), 재사용 가능

  1) 독립성의 정도 판단 : 약한결합도, 강한응집도

  - 결합도 : 상호의존의 정도

   자료(data, 데이터로 구성) < 스탬프(stamp, 자료구조로 구성, 다른 모듈이 영향을 받음) < 제어(control, 다른 모듈에서 흐름 제어) < 외부(external, 다른 모듈이 내부 데이터 접근) < 공유(common, 여러 모듈들이 공통으로 데이터 사용) < 내용(content, 내부기능과 데이터 직접 참조)

  - 응집도 : 정보은닉의 확장, 내부요소들끼리도 관련성을 판단하여 서로 기능간섭이 없도록, 품질

    기능(functional, 단일문제-단일기능) > 순차(sequential, 이전 모듈출력 -> 다음 모듈 입력) > 통신(communication, 동일입출력으로 서로 다른 기능 수행) > 절차(procedural, 다수의 기능이 순차적으로 진행) > 시간(temporal, 특정 시간대에 처리되는 기능 모음) > 논리(logical, 유사한 기능 모음) > 우연(coincodental, 관련 없는 요소로 구성)

  2) 팬-인, 팬-아웃 : 해당모듈을 제어하는, 해당모듈이 제어하는

  3) 공통모듈

기법 설명
정확성(correctness) 필요성
명확성(clarity) 비중의적(한가지 의미로 해석되도록)
완전성(completeness) 필요한 모든것
일관성(consistency) 충돌방지
추적성(traceability) 출처, 관계파악

 

  효과적인 모듈 설계방안 

  결합도↓ + 응집도↑ = 독립성 = 재사용

  복잡도↓ + 중복성↓ + 입출력↓ = 품질

 

5. 코드/디자인 패턴

  1) 코드 : 식별, 배열, 분류의 일정한 규칙에 따라 만들어진 기호

    순차, 블록(블록구분후 순차), 10진, 그룹분류, 연상, 표의숫자

  2) 디자인패턴 = 생성5 + 구조7 + 행위11

주간컴공

  - 생성패턴 : 캡슐화, 유연성

    추상팩토리(abstract factory) : 객체 생성코드가 상위 클래스에 존재, 하위(구체화)클래스가 상속, 하위클래스에 의존x

    메소드팩토리(factory method) : 객체 생성코드를 하위 클래스에서 구체화, 상위클래스는 인터페이스만 제공, 각각의 클래스가 다른 작업수행 가능

    빌더(builder) : 분리된 인스턴스를 조합하여 객체 생성

    프로토타입(prototype) : 원본복제, 비용저렴

    싱글톤(singleton) : 클래스내 인스턴스 하나뿐임을 보장, 동시참조 불가능

  - 구조패턴 : 복잡한 구조의 시스템개발에 필요

    어댑터(adapter) : 일치하지않는 인터페이스 변환

    브릿지(bridge) : 추상층(기능)과 구현층(구체화)을 분리하여 독립적 확장

    컴포지트(composite) : 트리구조구성, 단일과 복합개체 구분없이 다룸

    데코레이터(decorator) : 기능추가를 위해 다른 객체를 덧붙임

    퍼싸드(facade) : 서브클래스들의 통합 인터페이스를 제공(wrapper객체)하는 상위 클래스 구성

    플라이웨이트(flyweight) : 다수의 유사 객체 생성이 필요할 때 최대한 공유해서 사용(메모리 절약)

    프록시(proxy) : 접근이 어려운 객체에 접근할 수 있도록 인터페이스 역할 수행

  - 행위패턴 : 상호작용, 책임분배

    책임연쇄(chain of responsibility) : 둘이상의 객체가 연결(chain)되어 책임이 차례로 넘어감

    커맨드(command) : 명령어 캡슐화(추상과 구체), 로그에 기록

    인터프리터(interpreter) : 문법 표현 정의, 맞춤법 검사

    반복자(iterator) : 접근이 잦은 객체는 동일한 인터페이스를 사용하도록, 순차접근

    중재자(mediator) : 복잡한 상호작용 캡슐화

    메멘토(memento) : 특정시점의 상태 객체화, 되돌리기

    목적어(observer) : 이벤트 발행과 구독, 상태변화전달

    상태(state) : 상태에 따라 동작을 다르게

    전략(strategy) : 동일계열 알고리즘 상호교환, 독립적 사용

    템플릿 메소드(template method) : 상위에서 인터페이스 정의, 하위에서 구체화(유지보수)

    방문자(visitor) : 처리기능을 별도의 클래스로 구성

 

반응형