본문 바로가기
License/정보처리기사

[정보처리기사] 1과목 소프트웨어 설계 - 애플리케이션 설계(공통 모듈 설계)

by ngool 2024. 11. 4.

📌 모듈

모듈과 모듈화

모듈란, 다른 것들과 구별될 수 있는 독립적인 기능을 가진 단위(Unit)를 말합니다.

모듈화란, 시스템의 기능들을 모듈 단위로 나누는 것을 의미합니다.


모듈의 특징

  • 프로그래밍 언어에서 Function으로 표현
  • 모듈의 수가 증가하면 모델의 크기가 작아지고, 모듈 사이의 상호 교류가 증가
  • 복잡도 문제 해결에 도움이 됨
  • 독립적인 컴파일(어떤 프로그램을 동작 가능하게 만든다는 것) 가능
  • 유일한 이름을 가져야 함
  • 다른 모듈에서의 접근이 가능해야 함

모듈 재사용의 유형

  • 컴포넌트 재사용
  • 애플리케이션 재사용
  • 함수 및 객체 재사용

📌 모듈화 측정 지표

  • 응집도(Cohesion) : 모델의 독립성을 나타내는 개념. 모듈 내부 구성요소 간 연관된 정도
  • 결합도(Coupling) : 모듈과 모듈 간의 연관도

응집도는 높고, 결합도는 낮을 수록 좋은 모듈!! (그래야 독립적인 모듈이 될 수 있음)


응집도(Cohesion)

응집도란, 모델의 독립성을 나타내는 개념입니다.

얼마나 모듈 내 기능들이 응집되어 있냐

 

<응집도의 유형>

⇒ 아래로 갈 수록 응집도 높아짐

  • 우연적(Coincidental)
    • 서로 간에 어떤 의미 있는 연관 관계도 지니지 않은 구성 요소로 구성되는 경우
  • 논리적(Logical)
    • 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
  • 시간적(Temporal)
    • 모듈 내 구성 요소들이 서로 다른 기능을 같은 시간대에 함께 실행하는 경우
  • 절차적(Procedural)
    • 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우
  • 통신적(Communication)
    • 동일한 입출력을 사용하여 다른 기능을 수행하는 활동이 모여 있을 경우
  • 순차적(Sequential)
    • 모듈 내에서 한 활동으로부터 나온 출력 값을 다른 활동이 사용할 경우
  • 기능적(Functional)
    • 모듈 내부의 기능이 단일한 목적을 위해 수행되는 경우의 응집도

응집도가 높을 수록 모듈이 독립적이게 되어 유지보수가 쉬워지고 재사용하기 좋아진다!!


결합도(Coupling)

결합도는, 말 그대로 모듈과 모듈 간의 결합도를 의미합니다.

얼마나 다른 모듈과 결합될 만하냐

 

<결합도의 유형>

⇒ 아래로 갈 수록 연관도 낮아짐

  • 내용(Content)
    • 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때
  • 공통(Common)
    • 두 모듈이 동일한 전역 데이터를 활용할 경우
  • 외부(External)
    • 한 모듈이 다른 모듈의 데이터를 활용해 또 다른 모듈에 접근하는 경우
  • 제어(Control)
    • 어떤 모듈이 다른 모듈의 내부 논리조직을 제어하기 위해 제어 신호를 이용해 통신하는 경우
  • 스탬프(Stamp)
    • 모듈 간에 구조체, 객체와 같은 복잡한 데이터 구조를 주고 받는 경우
  • 자료(Data)
    • 모듈 간에 정확히 필요한 데이터만 주고 받는 경우

결합도가 낮을 수록 모듈이 독립적이게 되어 유지보수가 쉬워지고 재사용하기 좋아진다!!


FAN-IN / OUT 계산

⇒ 각 모듈이 어떤 모듈을 제어하고, 어떤 모듈에 의해 제어되는지 확인

  • FAN-IN : “나를” 제어(호출)하는 다른 모듈의 수
  • FAN-OUT : “내가” 제어(호출)하는 다른 모듈의 수

계산 문제 예시) 모듈 D의 FAN-IN 및 FAN-OUT을 계산하시오.

(위에서 아래로 제어한다고 가정)

FAN-IN : A, B 두 개

FAN-OUT : F, G, H 세 개

일반적으로 FAN-IN이 높고, FAN-OUT이 작은 모듈이 좋은 모델!
(이 모듈이 많이 재사용되면서도 다른 모듈에 대한 의존성은 낮다는 것이기 때문)


📌 소프트웨어 설계

소프트웨어 설계 유형

  • 자료 구조 설계
    • 데이터 저장 및 접근 방식을 결정
  • 아키텍처 설계
    • 시스템의 전체적인 구조와 구성 요소 간 상호작용을 결정
  • 인터페이스 설계
    • 시스템 내-외부 간의 데이터와 기능 교환 방식을 정의
  • 프로시저 설계
    • 모듈 내 기능적인 작업 단위와 이들 간의 관계를 정의하여 모듈 동작을 구체화
  • 협약에 의한 설계(Design by contract)
    • 소프트웨어 컴포넌트가 제공하고 기대하는 서비스를 명확히 정의하여 상호작용을 안전하게 보

⇒ 위 5가지 설계는 시스템 전반의 구조와 동작 원리를 결정하는 “상위 설계”

모듈 설계의 경우 “하위 설계”에 해당됨


설계 과정에 따른 분류

  • 상향식 설계
    • 최하위 수준에서 각각의 모듈들을 설계하고, 이들이 완성되면 결합하여 검사
  • 하향식 설계
    • 제일 상위에 있는 main user function에서 시작해 기능을 하위 기능들로 분할해가면서 설계하는 방식
    • 그럼에도 낮은 레벨의 데이터 구조 세부 사항은 설계 초기 단계에서부터 어느 정도는 필요
      (이렇게 세부 사항을 초반부에 꼼꼼하게 설정하다보면 상향식 설계처럼 될 수 있음)

⇒ 현업에서는 두 가지를 섞어 사용한다고 합니다!


📌 코드 설계

코드란?

코드는 컴퓨터를 이용하여 자료를 처리하는 과정에서 분류, 조합 및 집계를 용이하게 하고, 특정 자료의 추출을 쉽게 하기 위해 사용하는 기호입니다.


코드의 기능

식별 기능 데이터 간의 성격에 따라 구분이 가능하다.
분류 기능 특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 할 수 있다.
배열 기능 의미를 부여하여 나열할 수 있다.
표준화 기능 다양한 데이터를 기준에 맞추어 표현할 수 있다.
간소화 기능 복잡한 데이터를 간소화할 수 있다.

코드 설계의 종류

  • 연상 코드
    • 약호를 통해 코드만 보고도 대상을 연상할 수 있도록 만든 코드
    • (ex. 테슬라 → TSLA)
  • 블록 코드
    • 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여하는 코드
    • (ex. 1001~1100 : 총무부, 1101~1200 : 영업부)
  • 순차 코드
    • 기준에 따라 순서대로 일련번호를 부여하는 코드
    • (ex. 1번, 2번 ..)
  • 표의 숫자 코드
    • 코드화 대상 항목의 중량, 면적 등 물리적 수치를 이용해 만든 코드
    • (ex. 120-720-1500 : 두께X폭X길이가 120X720X1500인 강판)

📌 소프트웨어 아키텍처

소프트웨어 아키텍처란?

소프트웨어 아키텍처란, 소프트웨어의 골격이 되는 기본 구조를 말합니다.


소프트웨어 아키텍처 패턴 유형

=> 특정 상황을 위해 반복적으로 사용되는 설계 패턴

  • 계층화 패턴
    • 시스템을 여러 계층으로 분리해서 각 층이 특정 역할을 수행하게 설계
  • 클라이언트-서버 패턴
    • 시스템을 클라이언트와 서버 두 부분으로 구성한 패턴
    • 클라이언트가 서버에 서비스를 요청하면 서버는 클라이언트에게 서비스를 제공
  • MVC(Model-View-Controller) 패턴
    • 시스템을 모델, 뷰, 컨트롤러 3개의 구성 요소로 나누어 구조화한 패턴
      • 모델 : 데이터와 데이터를 처리하는 로직 기능 담당
      • : 사용자에게 정보를 보여주는 부
      • 컨트롤러 : 사용자 입력을 처리하고, 모델과 뷰 사이의 상호작용을 관리
  • 파이프 필터(Pipe-Filter) 패턴
    • 데이터 처리를 여러 단계의 필터들로 구성된 파이프라인으로 나누어 설계한 패턴
    • 각 필터는 데이터를 입력 받아 특정 작업을 수행하고, 그 결과를 다음 필터로 전달
    • ex) UNIX의 Shell
  • 마스터-슬레이브(Master-Slave) 패턴
    • 중앙의 마스터가 마스터의 지시에 따라 동작하는 하위 시스템(슬레이브)를 관리하는 형태의 패턴
      • 마스터 : 전체 시스템의 제어 담당
      • 슬레이브 : 하위 시스템으로, 데이터 처리나 추가적인 계산 담당
    • 분산 시스템에서 주로 사용됨
  • 브로커(Broker) 패턴
    • 클라이언트와 서버 간의 통신을 중개하는 브로커를 사용하여 시스템 설계
      • 클라이언트 : 브로커를 통해 서버의 서비스를 요청
      • 서버 : 브로커를 통해 클라이언트의 요청 처리