📌 모듈
모듈과 모듈화
모듈이란, 다른 것들과 구별될 수 있는 독립적인 기능을 가진 단위(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개의 구성 요소로 나누어 구조화한 패턴
- 모델 : 데이터와 데이터를 처리하는 로직 기능 담당
- 뷰 : 사용자에게 정보를 보여주는 부
- 컨트롤러 : 사용자 입력을 처리하고, 모델과 뷰 사이의 상호작용을 관리
- 시스템을 모델, 뷰, 컨트롤러 3개의 구성 요소로 나누어 구조화한 패턴
- 파이프 필터(Pipe-Filter) 패턴
- 데이터 처리를 여러 단계의 필터들로 구성된 파이프라인으로 나누어 설계한 패턴
- 각 필터는 데이터를 입력 받아 특정 작업을 수행하고, 그 결과를 다음 필터로 전달
- ex) UNIX의 Shell
- 마스터-슬레이브(Master-Slave) 패턴
- 중앙의 마스터가 마스터의 지시에 따라 동작하는 하위 시스템(슬레이브)를 관리하는 형태의 패턴
- 마스터 : 전체 시스템의 제어 담당
- 슬레이브 : 하위 시스템으로, 데이터 처리나 추가적인 계산 담당
- 분산 시스템에서 주로 사용됨
- 중앙의 마스터가 마스터의 지시에 따라 동작하는 하위 시스템(슬레이브)를 관리하는 형태의 패턴
- 브로커(Broker) 패턴
- 클라이언트와 서버 간의 통신을 중개하는 브로커를 사용하여 시스템 설계
- 클라이언트 : 브로커를 통해 서버의 서비스를 요청
- 서버 : 브로커를 통해 클라이언트의 요청 처리
- 클라이언트와 서버 간의 통신을 중개하는 브로커를 사용하여 시스템 설계
'License > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 4과목 프로그래밍 언어 활용 - 응용 SW 기초 기술 활용(네트워크) (1) | 2024.11.09 |
---|---|
[정보처리기사] 1과목 소프트웨어 설계 - 애플리케이션 설계(객체 지향 설계) (3) | 2024.11.04 |
[정보처리기사] 1과목 소프트웨어 설계 - 화면 설계 (1) | 2024.10.25 |
[정보처리기사] 1과목 소프트웨어 설계 - 요구사항 확인 (2) | 2024.10.21 |