정보처리기사

모듈 / IPC / 디자인 패턴

청춘고양이 2023. 9. 2. 11:02
반응형

모듈 : 모듈화를 통해 분리된 시스템의 각 기능. 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업단위 등을 의미
모듈의 독립성 => 결합도와 응집도에 의해 측정
모듈의 독립성을 높이려면 결합도는 최소화 응집도는 최대화

  • 결합도(coupling) : 모듈간에 상호 의존하는 정도 (결합도는 약할수록 품질이 높고 강할수록 품질이 낮다)
    • 자료결합도(data) : 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도
    • 스탬프결합도(stamp) : 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결합도
    • 제어결합도(control) : 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어신호나 제어요소를 전달하는 결합도
    • 외부결합도(external) : 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할때의 결합도
    • 공통결합도(common) : 공유되는 공통 데이터 영역을 여러 모듈이 사용할때의 결합도
    • 내용결합도(content) : 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도

응집도 : 모듈의 내부 요소들이 서로 관련되어 있는 정도
응집도는 강할수록 품질이 높고, 약할수록 품질 이 낮다
우연적 응집도 : 모듈 내부의 각 구성요소들이 서로 관련 없는 요소로만 구성된 경우의 응집도
논리적 응집도 : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도
시간적 응집도 : 특정 시간에 처리되는 몇개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도
절차적 응집도 : 모듈이 다수의 관련 기능을 가질 때 모듈안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도
교환(통신적) 응집도 : 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성요소들이 모였을 경우의 응집도
순차적 응집도 : 모듈 내 하나의 활동으로 부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도
기능적 응집도 : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
팬인 : 어떤 모듈을 제어하는 모듈의 수
팬아웃: 어떤 모듈에 의해 제어되는 모듈의 수
N-S 차트 : 논리의 기술에중점을 두고 도형을 이용해 표현하는 방법, 박스 다이어그램

  • 연속, 선택 및 다중 선택, 반복 3가지 제어논리구조 표현

단위모듈 

  • IPC : 모듈간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합

IPC의 대표적인 메소드 5가지 

  • Shared Memory : 공유 가능한 메모리를 구성하여 다수의 프로세스가 통신하는 방식
  • Socket : 네트워크 소켓을 이용하여 네트워크를 경유하는 프로세스 간에 통신하는 방식
  • Semaphores : 공유 자원에 대한 접근 제어를 통해 통신하는 방식
  • Pipes & named Pipes : 파이프라고 불리는 선입선출 형태로 구성된 메모리를 여러 프로세스가 공유하여 통신하는 방식
  • Message Queueing : 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방법

테스트 케이스 : 구현된 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지를 확인하기 위한 테스트 항목에 대한 명세서
테스트케이스의 구성요소

  • 식별자 : 항목식별자, 일련번호
  • 테스트항목 : 테스트 대상
  • 입력명세 : 입력데이터, 테스트 조건
  • 출력명세 : 테스트 케이스 수행시 예상되는 출력결과
  • 환경설정 : 필요한 하드웨어, 소프트웨어의 환경
  • 특수 절차 요구 : 테스트 케이스 수행시 특별히 요구되는 절차
  • 의존성 기술 : 테스트케이스 간의 의존성

공통모듈 : 여러프로그램에서 공통으로 사용할 수 있는 모듈
명세기법 5가지

  • 정확성 : 시스템 구현시 해당 기능이 필요하는 것을 알 수 있도록 정확히 작성
  • 명확성 : 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성
  • 완전성 : 시스템 구현을 위해 필요한 모든 것을 기술
  • 일관성 : 공통 기능들 간 상호 충돌이 발생하지 않도록 작성
  • 추적성 : 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성

재사용 : 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
재사용 규모에 따른 분류

  • 함수와 객체 : 클래스나 메소드 단위의 소스코드를 재사용
  • 컴포넌트 : 컴포넌트 자체에 대한 수정없이 인터페이스를 통해 통신하는 방식으로 재사용
  • 애플리케이션 : 공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용

디자인 패턴 : 모듈간의 관계 및 인터페이스를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 에제를 의미 

  • 생성패턴 
  • 구조패턴
  • 행위패턴

생성패턴 : 클래스나 객체의 생성과 참조과정을 정의하는 패턴

  • 추상팩토리 : 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관 의존하는 객체들의 그룹을 생성하여 추상적으로 표현
  • 빌더 : 작게 분리된 인스턴스를 건축하듯 조합하여 객체를 생성 
  • 팩토리메소드 : 객체 생성을 서브클래스에서 처리하도록 분리하여 캡슐화한 패턴
  • 프로토타입 : 원본객체를 복제하는 방법으로 객체를 생성하는 패턴
  • 싱글톤 :

구조패턴 : 구조가 복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하여 더 큰 구조로 만드는 패턴

  • 어댑터 : 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환해주는 패턴
  • 브리지 : 구현부에서 추상층을 분리,  서로가 독립적으로 확장할 수 있도록 구성한 패턴
  • 컴포지트 : 여러 객체를 가진 복합객체와 단일 객체를 구분없이 다루고자 할 때 사용하는 패턴
  • 데코레이터 : 객체간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴
  • 퍼싸드 : 복잡한 서브클래스들을 피해 더 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있도록 하는 패턴
  • 플라이웨이트 : 인스턴스가 필요할 때마다 매번 생성하는 것이 아니고 가능한 공유해서 사용함으로써 메모리를 절약하는 패턴
  • 프록시 : 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴

행위패턴  : 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴

  • 옵서버 : 한 객체의 상태가 변화하면 객체에 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴, 주로 분산된 시스템간의 이벤트를 생성 발행하고 이를 수신해야할 때 이용
  • 책임 연쇄 : 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음객체로 넘어가는 형태의 패턴
  • 커맨드 : 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴
  • 인터프리터 : 언어나 문법 표현을 정의하는 패턴 
  • 반복자 : 자료구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴
  • 중재자 : 수많은 객체들 간의 복잡한 상호작용을 캡슐화하여 객체로 정의하는 패턴
  • 메멘토 : 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴
  • 상태 : 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용하는 패턴
  • 전략 : 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
  • 템플릿 메소드 : 상위클래스에서 골격을 정의하고, 하위클래스에서 세부 처리를 구체화하는 구조의 패턴
  • 방문자 : 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성하는 패턴 

 

반응형