Posts ⚡ 정보처리기사 필기 3장. 어플리케이션 설계
Post
Cancel

⚡ 정보처리기사 필기 3장. 어플리케이션 설계

3장. 어플리케이션 설계

주간컴공 채널의 지마님의 정보처리기사 필기 유튜브 강의를 들으며 정리한 내용입니다. 1과목 소프트웨어 설계의 3장 어플리케이션 설계 파트를 필기하였습니다.

1. 소프트웨어 설계

SW아키텍처

  • 뜻: 기본 구조, 개발 기반
  • 역할: 품질유지, 원칙, 지침
  • 모듈: 부품

기본 원리

  • 모듈화: 유지관리 용이 (많으면 통합비용↑, 적으면 개발비용↑)
  • 추상화: 포괄적 개념, 구체화하기 위해 필요, 가성비, 구조파악 용이
  • 단계적 분해: 하향식, 추상화의 반복으로 더 많은 단계의 분해 가능
  • 정보 은닉: 접근금지, 별도의 인터페이스 사용, 유지보수에 용이,

품질 속성

  • 시스템: 성능, 보완
  • 비즈니스: 비용, 자원
  • 아키텍처: 결함

설계 과정

  • 목표 - 시스템타입 - 아키텍처패턴 - 시스템구체화 - 검토

  • 아키텍처패턴: 미리 만들어 둔 공식

2. 아키텍처 패턴

레이어(계층) 패턴

상/하위 계층끼리 상호작용

서버 - 클라이언트 패턴

1:다, 항시 대기, 독립적 기능

파이프 - 필터

재사용, 확장, 변환, 동기화, 버퍼링

모델 - 뷰 - 컨트롤러 패턴

대화형 어플리케이션에 적합

마스터 - 슬레이브 패턴

상/하위 계층끼리 상호작용

브로커 패턴

피어 - 투 - 피어 패턴

이벤트 - 버스 패턴

블랙보드 패턴

공유 데이터 검색, 인식, 식별

3. 객체지향

  • 데이터: 상수, 변수, 배열(데이터), 구조체(별도의 의미를 부여하는 데이터- 정보)
  • 기능: 실행문, 분기문, 반복문, 함수

절차(구조적) 지향

  • 프로그램 자체를 한 덩어리로 설계해서 원하지 않는 접근을 차단할 수 없음
  • 모든 데이터타입의 집합체인 구조체를 함수로 제어해서 결과를 내는 것이 일반적인 절차지향 프로그램의 구조

객체 지향

클래스: 데이터와 관련된 기능을 묶어 캡슐화

  • 정보 은닉
  • 재사용: 인스턴스: 클래스를 재사용하기 위해 복제한 결과물이고, 결과물을 통틀어 객체라고 말한다. 인스턴스는 같은 클래스의 구조를 가지지만 내용은 다를 수 있다. 여러 객체들이 서로 메시지를 보내면서 기능 및 데이터 사용을 요청하고, 그 결과를 돌려주면서 프로그램이 진행된다.
  • 확장성(유지보수): 상속을 통해 확장이 가능하다. 상위클래스의 모든 요소에 더해 자신의 요소까지 전부 사용이 가능한 인스턴스를 생성할 수 있다. 상속을 통해 재사용 + 확장의 개념까지 가질 수 있다.
  • 다형성: 클래스는 상속을 통해서 여러 기능을 확장할 수 있다. 여기서 생성된 인스턴스 역시 많은 기능을 가지고 있다. 기능의 제한을 걸어서 특정 기능만 수행할 수 있다면, 일일이 그 기능만 수행하는 객체들을 따로 생성할 필요 없다.

모듈

모듈은 모듈화된 기능으로, 서브루틴, 서브 시스템 등으로도 불린다. 재사용이 가능하다는 특징을 가지고 있다. 결합도와 응집도록 독립성을 판단할 수 있고, 이는 품질과 관련된다.

결합도

모듈 간 상호 의존(영향을 미치는) 정도를 뜻한다.

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

응집도

정보은닉 개념을 확장한 것으로, 내부 요소들끼리 관련된 정도를 말한다.

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

  • 인: 해당 모듈을 제어하는, 들어오는 화살표
  • 아웃: 해당 모듈이 제어하는, 나가는 화살표

공통 모듈

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

효과적인 모듈 설계 방안

  • 결합도 :arrow_down: + 응집도:arrow_up: = 독립성 = 재사용
  • 복잡도 :arrow_down: + 중복성 :arrow_down: + 입출력 :arrow_down: = 품질

코드, 디자인 패턴

코드

  • 순차
  • 블록
  • 10진
  • 그룹분류
  • 연상
  • 펴의숫자

디자인 패턴

아키텍처 패턴은 시스템 구조에 대한 공식이라면, 디자인패턴은 서브 시스템에 대한 상세 구현에 대한 공식이다.

생성 패턴

캡슐화, 유연성

  • Abstract Factory: 객체 생성 코드가 상위 클래스에 존재, 하위(구체화) 클래스가 받아 씀
  • 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: 상위에서 인터페이스 정의. 하위에서 구체화(유지보수) (factory method와 같은 개념 )
  • Visitor: 처리 기능을 별도의 클래스로 구성
This post is licensed under CC BY 4.0 by the author.

💻 01. HTTP 개요

백준 알고리즘 2908번: 상수 (Java)

Loading comments from Disqus ...