정보처리기사 1과목 정리 (3)

거부기·2022년 6월 23일
1

📋정보처리기사

목록 보기
3/4
post-thumbnail

1. 소프트웨어 설계

C. 어플리케이션 설계

① 소프트웨어 아키텍처 :

아키텍쳐 : 기본구조, 소프트웨어 베이스
동일한 아키텍쳐 : 기본 구조가 같은 여러 형태의 결과물
품질이 좋다 = 요구사항을 잘 충족한다

📌 아키텍처의 설계 원리

  • 모듈화 : 부품, 유지관리 용이
    추상화 : 각 요소들의 공통적인 부분을 포괄하는 것,
    복잡한 구조를 최소비용으로 파악, 구조 파악 용이
    ☁ 과정(흐름), 구조(데이터), 제어(이벤트)
    +) 구체화 : 공통적인 부분을 세부적으로 나누는 것 (↔ 추상화)

  • 단계적 분해
    하향식 구체화 : 추상화 반복할 수록 구체적인 분해 가능

  • 정보은닉

📌 아키텍처 품질 속성

  • 시스템 측면 : 성능, 보안, 가용성, 기능성, 사용성
  • 비즈니스 측면 : 시장 적시성, 비용과 혜택, 시스템 수명
  • 아키텍처 측면 : 무결성, 정확성, 완결성, 구축 가능성

📌 설계 과정

목표설정 → 시스템 타입 (대화형 : 일반적인, 이벤트형 : 외부신호, 변환형 : 데이터 변환, 객체 영속형 : 데이터베이스 시스템) → 아키텍처 패턴 → 시스템 구체화(서브 시스템의 인터페이스, 인터렉션 구체화) → 검토


② 아키텍처 패턴 :

문제 해결의 윤곽 제시 / 원칙과 지침 역할
아키텍처 스타일, 표준 아키텍처도 같은 말
👍 장점 : 시간 단축, 품질 향상, 검증 편리, 예측 가능 등

  • 레이어(계층) 패턴 : 각각의 상위, 하위 레이어끼리만 상호작용
    특정 레이어만 유지보수하여 시스템을 개선할 수도 있음

  • 클라이언트-서버 패턴 : 클라이언트는 기본적으로 다수(자원 요청), 서버는 항시 대기 상태(자원 제공), 각자의 기능이 독립적으로 동작

  • 파이프-필터 패턴 : 스트림(데이터의 흐름)의 각 단계를 파이프와 필터로 연결, 파이프는 라인 그리고 필터는 데이터를 캡슐화(정보은닉)하는 것 / 재사용성, 확장성이 좋음 → 데이터 변환, 버퍼링, 동기화 등의 작업에 유리

  • 모델-뷰-컨트롤러 패턴 : 컴포넌트(모듈)을 모델,뷰,컨트롤러로 구성한 것
    모델 : 핵심기능, 데이터 보관 / 컨트롤러 : 입력처리 / 뷰 : 처리된 정보 표시
    여러 형태의 뷰를 생성할 수 있으며, 일반적인 어플리케이션에 적합

  • 마스터-슬레이브 패턴 : 마스터 컴포넌트가 지시한 일을 여러 슬레이브 컴포넌트가 병렬처리하여 결과를 취합 → 슬레이브가 몇개가 고장이 나도 업무처리에 문제 x

  • 브로커 패턴 : 클라이언트의 요청을 브로커가 중간에서 적절한 서버와 연결해주는 형식 / 여러 서버가 존재하여 분산환경 시스템이라고도 함

  • 피어-투-피어 패턴 : 서버와 클라이언트가 서로 역할을 바꿀 수 있는 형태, 2가지 일을 병렬로 수행하는 멀티스레딩이 특징

  • 이벤트-버스 패턴 : 이벤트 발행 → 채널(버스)를 구독하는 리스너들이 이벤트를 받아서 처리하는 형식

  • 모델-뷰-컨트롤러 패턴 : 많은 컴포넌트들이 공유 데이터를 관리하는 블랙보드에 접근하여 원하는 데이터를 찾는 형식 / 음성인식, 신호해석 등의 기술에서 사용함


③ 객체지향 :

데이터 : 상수 / 변수 / 배열 / 구조체
기능 : 실행문 / 분기문 / 반복문 / 함수

  • 클래스 : 데이터와 그에 관련된 기능을 묶은 것 = 캡슐화(정보은닉)
    👉 재사용 및 유지보수에 수월

    • 인스턴스화 : 클래스 복제, 복제된 결과물 = 인스턴스, 객체(결과물들을 통칭하는 단어)는 같은 클래스의 구조를 가지지만 내용을 달리 가짐
    • 상속(확장) : 하위 클래스는 상위 클래스의 모든 요소부터 자신의 요소까지 전부 사용이 가능한 인스턴스를 생성할 수 있음 / 재사용 + 확장
  • 다형성 : 필요한 일을 각각 따로 객체를 생성하는게 아니라 통합객체로 여러가지 일을 수행할 수 있게 하는 것

④ 모듈 :

모듈 : 모듈화를 통해 분리된 기능
재사용, 유지보수가 가능하다 → 모듈이 독립성이 강해야 함(= 품질이 좋음)

  • 독립성 :

    • 결합도 : 상호의존의 정도 / 약해야 품질이 좋아짐
      👉 자료 → 스탬프 → 제어 → 외부 → 공유 → 내용 (약한순 ~ 강한순)
    • 응집도 : 강할수록 품질이 좋아짐
      👉 기능 → 순차 → 통신 → 절차 → 시간 → 논리 → 우연 (강한순 ~ 약한순)

  • 팬-인 : 모듈로 들어오는 제어신호, 화살표가 들어온 것

  • 팬-아웃 : 모듈로 나가는 제어신호, 화살표가 나간 것
    👉 시스템 복잡도를 최소화하려면 인은 높게, 아웃은 낮게 설계

  • 공통모듈 : 정확성(필요성), 명확성(비중의적), 완전성, 일관성(충돌방지), 추적성(출처/관계 파악)

🦾 효과적인 모듈 설계방안

  • 결합도는 낮게, 응집도는 높게 => 독립성이 높아짐
  • 복잡도, 중복성은 낮게, 입출력은 중복되지 않으면 하나의 입출력만 가지도록 설계 => 독립적, 단순 = 품질

⑤ 코드/ 디자인 패턴 :

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

  1. 순차 : 일련번호/ 차례대로, 다른 개념들에 더해서 사용됨
  2. 블록 : 구역을 구분한 뒤에 순차코드
  3. 10진 : 항목을 10개로 나누고, 필요할 때까지 반복해서 코드를 부여, 한자리씩
  4. 그룹분류 : 하이픈으로 구분, 항목별로 일련번호 부여, 10진이랑 유사, 2자리 이상 가능
  5. 연상 : 코드만 봐도 연상할 수 있게, 브랜드-상품코드 등
  6. 표의 숫자 : 해당 제품의 수치 등을 코드에 사용한건데 유효 숫자 코드라고 함

아키텍쳐 패턴 : 시스템 구조
디자인 패턴 : 서브 시스템 상세 구현 (생성 5개, 구조 7개, 행위 11개)
→ 장점 유사

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

  • 추상팩토리 : 상위클래스 객체 생성코드를 하위 클래스에게 상속, 연동해서 변경됨 (의존, 하위 클래스에 의존 x)

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

  • 빌더 : 분리된 인스턴스를 조합하여 객체 생성 → 생성과 표현 분리
    같은 객체를 생성해도 다른 결과를 도출할 수 있음

  • 프로토타입 : 원본을 복제하는 형태로 객체 생성, 비용 저렴

  • 싱글톤 : 클래스 내 인스턴스가 하나만 필요할 때, 동시 참조 불가능

  • 빌더 :

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

  • 어댑터 : 클래스간에 서로 일치하지 않는 인터페이스를 변환해줌

  • 브릿지 : 추상층(기능 정의), 구현층(구체화) 서로 분리, 서로 독립적인 확장이 가능하도록 구성

  • 컴포지트 : 단일/복합 객체를 하나로 다루기 위해 트리구조로 구성

  • 데코레이터 : 클래스에 기능을 추가하기 위해 다른 객체를 덧붙이는 형태

  • 퍼싸드 : 서브 클래스의 통합 인터페이스를 제공할 수 있는 wrapper객체를 통해서 서브 클래스들을 간편하게 이용할 수 있는 패턴

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

  • 프록시 : 접근이 어려운 객체에 접근할 수 있또록 인터페이스 역할 수행

📌 행위 패턴 : 상호작용, 책임분배, 결합도 최소화

  • 책임연쇄 : 둘 이상의 객체가 연결되어 책임이 차례로 넘어감

  • 커맨드 : 요청이 필요한 명령어를 객체화하여 로그에 기록하는 형식

  • 인터프리터 : 문법 표현 정의/ 맞춤법 검사

  • 반복자 : 접근이 잦은 객체는 동일한 인터페이스 사용하도록 순차접근, 디렉토리 반복자

  • 중재자 : 복잡한 상호작용 캡슐화, 결합도를 낮춤

  • 메멘토 : 특정 시점의 상태를 객체화하고, 필요에 따라 해당 위치로 들림

  • 옵저버 : 객체 상태가 변하면 상속 중이 다른 객체들에게 전달하는 형태, 이벤트 발행과 구독

  • 상태 : 상태에 따라 동작을 다르게

  • 전략 : 동일 계열 알고리즘 상호 교환, 독립적 사용/변경 가능

  • 템플릿 메소드 : 상위 클래스에서 인터페이스를 정의하고, 하위 클래스에서 인터페이스 구체화, 코드의 유지보수가 쉬워짐 ( = 생성패턴.팩토리 메소드)

  • 방문자 : 처리 기능을 별도의 클래스로 분리하는 패턴, 데이터 구조와 기능을 분리


참고한 영상 : 정보처리기사 필기

profile
느리지만 확실하게

0개의 댓글