본문 바로가기

정보처리기사

[정보처리기사] 필기 노트 - 애플리케이션 설계

  • 모듈화
    • 모듈이란?
      • 전체 프로그램을 특정 기능을 처리할 수 있는 독립적인 부분으로 분할한 실행 코드
      • 코딩, 컴파일, 설계는 독립적으로 수행됨
    • 응집도 (Cohesion)
      • 한 모듈을 이루고 있는 각 요소들이 공통적인 목적 달성을 위하여 어느 정도의 관련성이 있는가를 파악하는 척도
      • 우연적 응집도 (응집도 낮음, 품질 나쁨) -> 논리적 응집도 -> 시간적 응집도 -> 절차적 응집도 -> 통신적 응집도 -> 순차적 응집도 -> 기능적 응집도 (응집도 높음, 품질 좋음)
    • 결합도 (Coupling)
      • 모듈과 모듈 간의 관계성의 척도
      • 자료 결합도 (결합도 낮음, 품질 좋음) -> 스탬프 결합도 -> 제어 결합도 -> 외부 결합도 -> 공통 결합도 -> 내용 결합도 (결합도 높음, 품질 나쁨)
    • 공통 모듈
      • 공통 모듈이란?
        • 여러 기능 및 프로그램에서 공통적으로 사용할 수 있는 모듈을 모아놓은 것
        • 재사용: 서브 시스템이 추가되더라도 공통 모듈은 재개발 없이 재사용 가능
        • 중복 개발 방지: 개발 비용 절감
        • 모듈 간 표준화: 소프트웨어의 품질 향상
      • 공통 모듈에 대한 명세 기법
        • 정확성, 명확성, 완전성, 일관성, 추적성
      • 재사용 (Reuse)
        • 개발 시간 및 비용 절감을 위하여 이미 검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위해 적합하게 최적화시키는 작업
        • 함수와 객체 재사용, 컴포넌트 재사용, 애플리케이션 재사용
      • 팬인(Fan-in)과 팬아웃(Fan-out)
        • 팬인(Fan-in): 자신을 사용하는 모듈의 수
        • 팬아웃(Fan-out0: 자신이 호출하는 모듈의 수
    • 코드 (Code)
      • 코드란?
        • 데이터를 사용 목적에 따라 그룹으로 분류 및 나열하고 특정 자료의 선별 및 추출 작업을 용이하게 하기 위해 부여한 숫자, 문자 및 기호 체계
      • 코드의 기능
        • 식별, 분류, 배열, 기타 기능
      • 코드의 유형
        • 순차 코드: 일정한 일련번호를 부여
        • 블록 코드: 공통 특성을 몇 개의 블록으로 구분하여 부여
        • 10진 코드: 10진으로 분류하고 다시 10진으로 분류
        • 그룹 분류 코드: 대상을 대분류, 소분류 등으로 구분하고 각 그룹 내에서 순차 번호를 부여
        • 연상 코드: 대상 항복의 명칭 등을 코드에 반영하여 대상에 대한 연상이 가능한 코드
        • 표의 숫자 코드: 대상 항목의 중량, 면접, 용량 등의 물리적 수치를 이용하여 만든 코드
        • 합성 코드: 2개 이상의 코드를 조합하여 만든 코드
    • 공통 모듈 인덱스
      • 인덱스란?
        • 원하는 내용을 빠르게 검색하고 추출할 수 있도록 일정한 순서에 따라 별도로 정리하여 놓은 목록
      • 공통 모듈 인덱스 방법
        • 공통 모듈에 대한 인덱스는 공통 모듈을 유일하게 식별할 수 있는 번호 체계를 부여함으로써 공통 모듈에 대한 그룹화(Grouping)와 식별 및 정보 추출을 용이하게 하는 기법
    • 소프트웨어 아키텍처
      • 소프트웨어 아키텍처란?
        • 외부에서 인식할 수 있는 특성이 담긴 소프트웨어의 골격이 되는 기본 구조
      • 아키텍처 모델의 분류
        • 데이터 중심형(repository) 모델: 주요 데이터가 단일 중앙 저장소(repository)에서 중앙관리되는 형태
        • 클라이언트-서버 모델: 네트워크를 이용하는 분산 시스템 형태의 모델
        • 계층 모델: 여러 가지 기능을 몇 개의 계층으로 나누어 배치
        • MVC(Model/View/Controller) 모델: 시스템을 모델, 뷰, 컨트롤러로 나누어서 구성하는 형태
        • 데이터 흐름 모델: 필터에 해당되는 서브 시스템이 하나의 데이터를 입력으로 받아 처리한 후 그 결과를 다음 서브 시스템으로 넘겨주는 과정을 반복
    • 객체지향(OOP)
      • 객체지향이란?
        • 소프트웨어를 개발할 때에 객체들을 조립해서 작성할 수 있도록 하는 기법
        • 소프트웨어의 재사용 및 확장을 용이하게 함으로써 고품질의 소프트웨어를 빠르게 개발할 수 있으며 유지보수가 쉬움
      • 객체지향 용어
        • 객체 (Object): 일상의 보통 명사, 속성(Attribute)과 메소드(Method)를 결합시킨 것
        • 메시지 (Message): 객체와 객체 사이의 정보 교환 수단
        • 클래스 (Class): 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터를 추상화한 것
        • 인스턴스 (Instance): 클래스로 정의된 객체 중 하나로 객체의 복사본
      • 객체지향의 기본 원칙
        • 캡슐화 (Encapsulation): 자료 구조와 함수를 하나로 묶는 것을 의미
        • 정보 은닉 (Information Hiding): 객체는 다른 객체들로부터 자료를 감추고 연산을 통해서만 접근을 허용
        • 추상화 (Abstraction): 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것
        • 상속성 (Inheritance): 클래스와 객체를 재사용할 수 있도록 상위 클래스의 메소드와 속성을 하위 클래스가 물려받는 것
        • 다형성 (Polymophism): 동일한 상위 객체에서 상속받은 여러 하위 객체들이 각기 서로 다른 형태로 응답할 수 있는 능력
    • 디자인 패턴
      • 디자인 패턴이란?
        • 소프트웨어를 설계할 때 자주 발생하는 문제에 대한 해결방법을 패턴 형태로 일반화한 것
        • 디자인 패턴은 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류
      • 생성 패턴 (Creational Pattern)
        • 객체를 생성하는 패턴
        • 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공
        • 종류: 추상 팩토리, 빌더, 팩토리 메서드, 프로토타입, 싱글턴
      • 구조 패턴 (Structural Pattern)
        • 클래스와 객체가 어떤 식으로 조합되었는지를 나타내는 유형
        • 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴
        • 종류: 어댑터, 브리지, 컴퍼지트, 데커레이터, 퍼사드, 플라이웨이트, 프록시
      • 행위 패턴 (Behavioral Pattern)
        • 객체의 상호작용과 의무의 분산을 나타냄
        • 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화하는 것에 중점을 둠
        • 종류: 책임 연쇄, 커맨드, 인터프리터, 미디에이터, 메멘토, 옵서버, 스테이트, 스트래티지, 템플릿 메서드, 비지터