ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1-3 어플리케이션 설계
    자격증/정처기 2023. 5. 14. 06:26

    1.소프트웨어 아키텍처

    1)모듈화 - 기능을 세분화, 공통 모듈 재사용

    2)추상화 - 과정 / 데이터/ 제어(이벤트) 추상화

    3)단계적 분해 - 하향식으로 추상화 반복

    4)정보 은닉 - 모듈의 독립 수행

     

    아키텍처 설계 과정

    설계 목표 설정 -> 시스템 타입 결정 -> 아키텍처 패턴(스타일) 적용-> 서브시스템 구체화 -> 검토

     

    시스템 타입

    대화형(app), 이벤트(화재경보기), 변환형(컴파일러), 객체 영속형(DB로 파일 관리) 

     

    상위: 아키텍처, 구조, DB, 인터페이스

    하위: 모듈, 컴포넌트, 자료구조, 알고리즘

     

     

     

    2.아키텍처 패턴

     

    1)레이어 패턴

    - 하위 계층(서비스 제공자) -> 상위 계층(클라이언트)  

    *하위 계층의 숫자가 큼

    - OSI 참조 모델 ( 물리 + 데이터 링크 + 네트워크 + 전송 + 세션 + 표현 + 응용) 

     

    2)클라이언트 서버 패턴

    - 하나의 서버와 N개의 클라이언트

    - 사용자 <-> 클라이언트 <-> 서버

    - 요청과 응답을 위해 동기화될때를 빼곤 서로 독립적

     

    3)파이프 필터 패턴

    - 데이터 송수신 절차를 '필터'로 캡슐화 + '파이프'로 데이터 전송

    - 데이터를 넘겨주는 과정을 '반복'

    - 데이터 변환, 버퍼링, 동기화에 주로 사용

    *파이프라인: 필터와 파이프를 통한 일련의 처리 과정

    *UNIX의 쉘

     

    4)MVC 패턴

    뷰: Output 출력

    컨트롤러: Input 처리 명령을 전달 = '변경'

    모델: 서브시스템의 핵심 기능과 데이터 '보관'

    *서로 독립적

    *여러개의 뷰 가능 = 대화형 app에 적합

     

    +

    - 마스터 슬레이브: 하나의 m이 여러 s 통솔 = 병렬 처리에 유리

    - 브로커 패턴: 사용자의 요청에 맞는 컴포넌트 연결 = 분산 환경에 유리

    - 피어 투 피어: 피어는 클라이언트일수도 서버일수도 있음 = 멀티스레딩에 유리

    - 블랙보드: 모든 컴포넌트가 공유 데이터 저장소(블랙보드)에 접근 가능 = 음성 인식, 차량 식별, 신호 해석

    - 인터프리터: 코드 해석 어쩌구

     

     

     

     

    3.객체 지향

    - 객체를 '조립'하여 개발하는 기법

    -객체 지향: 상향식 (동적 계획법, Dynamic)

    -절차 지향: 하향식

     

     

    1)객체

    - '데이터'와 '함수'를 캡슐화한 하나의 모듈

    * 데이터: 객체의 정보 = 속성, 상태, 변수, 상수, 자료구조

    * 함수: 객체를 처리하는 알고리즘 = 메소드, 서비스, 동작, 연산, 오퍼레이션

    * 객체가 반응할 수 있는 메시지의 집합 = 행위 = 연산, 메소드

     

    - 각 객체는 식별 가능한 '이름'과 '상태'를 지님

     

    2)클래스

    - 공통된 속성과 연산(행위)을 지닌 객체의 집합 = 객체의 일반적인 타입(자료형)

    - 데이터를 추상화하는 단위

    * 인스턴스: 클래스에 속한 각각의 개체

    * 인스턴스화: 새로운 객체 생성

    - 부모 = 상위 = 슈퍼 클래스 // 자식 = 하위 = 서브 클래스

     

    3)캡슐화(Encapsulation)

    - 데이터와 함수를 하나로 묶음

    - 캡슐화된 객체는 정보 은닉이 되어 외부의 영향이 적어짐 + 재사용에 용이

    - 세부 내용을 몰라도 되므로 인터페이스가 단순, 결합도가 "낮아짐"

     

    4)상속(Inheritance)

    + 다중 상속: 엄마가 둘이라 좋으시겠네요

     

    5)다형성(Polymorphism)

    - 객체나 클래스가 전달받은 메시지에 대해 고유한 방법으로 응답하는 능력

    ex) '+'는 덧셈 or 문자열 연결

     

    오버로딩: 메소드의 이름은 같지만 매개변수의 자료형과 개수를 다르게함

    오버라이딩: 상속받은 메소드 재정의

     

     

     

    4.객체지향 설계

    - Object Oriented Analysis = OOA

     

    럼바우 분석 기법

    - 모든 구성 요소를 그래픽 표기법(다이어그램)으로 모델링

    - 객체 모델링 기법 = OMT 라고도 함

    - 객체 -> 동적 -> 기능 모델링

    (객체 다이어그램 -> 상태 다이어그램 -> 자료흐름도)

    *객체 다이어그램: 객체간의 관계 표현

    *상태 다이어그램: 시간에 따른 객체의 변화 표현

     

    +

    부치: 미시적 + 거시적 (micro + macro)

    Jacobson: 유스케이스 (상호작용)

    Coad Yourdon: ER 다이어그램

    Wirfs-Brock: 고객 명세서 (분석과 설계의 구분 x)

     

     

    객체 지향 설계 원칙 = SOLID

    1)단일 책임 원칙

    - 객체는 하나의 책임만 가짐

    - 응집도를 높이고 결합도를 낮춤

     

    2)개방 폐쇄 원칙

    - 기존 코드의 변경 없이 기능을 추가할 수 있게 설계

    - 확장엔 개방, 변경엔 폐쇄

    ex)공통 인터페이스를 하나로 묶어 캡슐화 

     

    3)리스코프 치환

    - 부모가 가능한 행위는 자식도 가능해야함 

     

    4)인터페이스 분리

    - 사용하지 않는 인터페이스와 연관이 있으면 안됨

     

    5)의존 역전 원칙

    - 추상성이 최대한 높은 클래스와 의존 관계를 맺을것

    *보통 인터페이스가 추상성이 높음

     

     

     

     

    5.모듈

    - 서브시스템, 서브루틴, 작업 단위

    - 단독으로 컴파일이 가능하다

     

    결합도(coupling)

    ~결합도 낮음~

    1)자료 결합도 - 매개변수로 데이터를 넘겨주고 리턴값을 받음

    2)스탬프 결합도 - 자료 구조 전달

    3)제어 결합도 - 다른 모듈의 논리적인 흐름을 제어

    4)외부 결합도 - 모듈의 지역변수를 외부 모듈이 참조

    5)공통 결합도 - 공통 데이터 영역 = 전역 변수

    6)내용 결합도 - 다른 모듈의 내부를 직접 참조

    ~결합도 높음~

     

    응집도(cohesion)

    ~응집도 강함~

    1)기능적 응집도 - 모든 요소가 한가지 기능을 위해 사용됨

    2)순차적 응집도 - 모듈 내에서 특정 값을 얻고 이를 다시 input으로 사용  *sequential

    3)교환적 응집도 - 입출력이 동일한 기능들을 묶임  *communication

    4)절차적 응집도 - 다수의 기능이 순차적으로 사용  *procedure

    5)시간적 응집도 - 특정 시간에 처리되는 기능들을 묶음  *temporal

    6)논리적 응집도 - 논리적으로 비슷한 기능을 묶음  *logical

    7)우연적 응집도 - 전혀 상관 없는게 묶임  *coincidental

    ~응집도 약함

     

     

    -팬인: 자신을 사용하는 모듈 수

    -팬아웃: 자신이 사용하는 모듈 수

    -팬인은 높을수록, 팬아웃은 낮을수록 좋음

    *A -> B    A가 B를 사용

     

     

    +

    NS 차트

    도형으로 논리 기술

     

     

     

     

    6.공통 모듈

    - 명확성: '일관'되게 한가지로 해석 가능하게

    - 일관성: 상호충돌 없게

    - 완전성: 필요한 모든것을 기술

    +정확성, 추적성

     

    - 재사용 범위: 함수와 객체 < 컴포넌트 < 어플리케이션 

     

     

    7.코드

    -순차: 12345

    -연상: TV-40  (mnemonic)

    -표의 숫자: 1980-1080 (실제수치)

     

    -그룹: 1-01-001

    -블록: 100~199, 200~299

    -10진: 1000(문학) -> 1100(판타지) -> 1130(해리포터)

     

     

     

    8.디자인 패턴

    - SW설계에서 자주 발생하는 문제에 대한 일반적인 해결방법

    - 아키텍처 패턴보다 더 상세한 개념

    - 배경 + 사례 + 샘플코드

    - 초기 비용이 비쌈, 객체지향 외에는 비적합

     

     

     

    생성 패턴

    - 객체 생성과 관련됨

     

    1)추상 팩토리: 서로 의존하는 객체들을 묶어 추상적으로 표현

    2)팩토리 메소드: 객체 생성을 서브 클래스에게 위임

    *가상 생성자(virtual constructor) 라고도 함

     

    3)프로토타입: 프로토타입을 복제하여 객체 생성

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

    *객체의 생성과 표현 분리 = 같은 객체 다른 결과

    5)싱글톤: 생성된 객체는 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없음

    *only 1 인스턴스 보장

     

     

     

    구조 패턴

    -클래스나 객체를 조합하여 더 큰 구조를 만듦

     

    1)어댑터: 인터페이스를 변환하여 클래스끼리 호환되게 함

    2)브릿지: 추상부(기능)와 구현부 분리

    3)컴포지트: 복합, 단일 개체를 구별없이 사용하게 함

    4)데코레이터: 개체간의 결합으로 기능 확장

    5)퍼싸드(facade): 통합 인터페이스(wrapper)로 단순화

    6)플라이웨이트: 인스턴스를 공유해 메모리 절약

    7)프록시

     

     

    행위 패턴

    1)책임 연쇄: 처리하지 못한 요청을 넘김

    2)반복자(iterator): 접근이 잦은 객체에 동일한 인터페이스

    3)템플릿 메소드: 상위클래스(골격) -> 하위 클래스(구체화)

    4)방문자: 처리 기능 분리

     

    5)상태: 상태값에 따른 동작 처리

    6)메멘토: 상태값을 백업 = ctrl+z

     

    7)커맨드: 요청 캡슐화(객체화)

    8)전략: 알고리즘 캡슐화

    9)중재자(mediator): 상호작용 캡술화

    10)인터프리터: 언어, 문법

    11)옵서버: 관측, 전달

     

     

     

    '자격증 > 정처기' 카테고리의 다른 글

    2-2 소프트웨어 패키징  (0) 2023.05.16
    2-1 데이터 입출력 구현  (0) 2023.05.16
    1-4 인터페이스 설계  (0) 2023.05.14
    1-2 화면 설계  (0) 2023.05.14
    1-1 요구사항 확인  (0) 2023.05.12
Designed by Tistory.