DevBlackCat
정보처리기사 필수 학습: 공통 모듈 설계 (2) 완전 정복!! 본문
728x90
1.공통모듈
기능을 재사용할수있는 독립된 모듈
모듈 : 특정기능을 처리할수있는 실행코드 , 함수나 메서들을 만들고 이를 합쳐서 프로그램을 만들게 된다.
재사용 범위에 따른 분류
분류 | 설명 |
함수와 객체 | - 클래스나 메서드 단위의 코드 재사용 |
컴포넌트 | - 인터페이스를 통해 통신하는 방식 재사용 |
애플리케이션 | - 공통된 기능들을 제공하는 애플리케이션 공유 |
재사용 사례
- 라이브러리
- 디자인패턴
- 프레임워크
작성원칙
- 정확성
- 명확성
- 완정성
- 일관성
- 추적성
응집도 개념 ★★ ( Cohesion )
- 모듈내부에서 구성요소간 밀접한 관계를 맺고있는정도
- 응집도가 높을수록 필요한 요소들로 구성되어 있다.
분류 | 설명 |
기능적 응집도 (Functional Cohesion) (제일 높음) | 모듈내부의 모든 기능이 단일 목적으로 수행 |
순차적 응집도 (Sequential Cohesion) | 모듈내에서 한활동으로 나온 출력값을 다른활동이 사용 |
통신적 응집도 (Communicational Cohesion) | 동일한 입력과 출력을 사용해서 다른기능을 수행하는 활동이 모여있는경우 |
절차적 응집도 (Procedural Cohesion) | 모듈이 다수 기능을 가질떄 모듈 구성요소들이 순차적으로 처리되는 경우 |
시간적 응집도 (Temporal Cohesion) | 특정 시간에 처리되어야 하는 활동을을 한모듈에서 처리하는 경우 |
논리적 응집도 (Logical Cohesion) | 유사한 성격이나 특정형태로 분류된 경우 |
우연적 응집도 (Coincidental Cohesion) | 연관이 없을 경우 |
우리 놀(논)던시절 통통한순대 기가 막혔지
우연적응집도 < 논리적응집도<시간적응집도<절차적응집도<통신적음식접<순차적 응집도<기능적 응집도
결합도(Coupling )
- 모듈과 모듈간 관련성/의존성
- 관련이 적어야 독립성이 높아 모듈간 영향이 줄어든다
분류 | 설명 |
자료결합도 (Data Coupling) (가장 낮음) |
모듈 간의 인터페이스로 값이 전달되는 경우 |
스탬프 결합도 (Stamp Coupling) | 모듈간의 인터페이스로 배열이나 오브젝트 등이 전달되는 경우 |
제어 결합도 (Control Coupling) | 단순 처리할 대상인 값만 전달하는 게 아니라 어떻게 처리해야 한다는 제어요소가 전달되는 경우 |
외부 결합도 (External Coupling) | 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조하는 경우 |
공통 결합도 (Common Coupling) | 파라미터가 아닌 모듈 밖에서 선언되어 있는 전역변수를 참조하고 전역변수를 갱신하는 식으로 상호작용 (두모듈이 동일한 전역데이터를 접근한다면 공통겹합) |
내용 결합도 (Content Coupling) (제일높음) |
다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우 (함수끼리 엮여 있음) (하나의 모듈이 직접적으로 다른모듈을 참조) |
자료=데이터
데스형 제외저래 공유랑 내가 닮았대
자료결합도<스탭프결합도<제어결합도<외부결합도<공통 결합도<내용 결합도
[ 공통 결합도 ]
var globalVar = 10;
function module1() {
globalVar = 20; // 전역 변수 수정
}
function module2() {
return globalVar; // 전역 변수 참조
}
팬인(Fan In) ,팬(Fan out)아웃
- 모듈의 복잡도와 상호작용을 분석하는데 사용하는 지표
- 팬인은 높게, 팬아웃은 낮게
설계 모델링
- 구조 모델링 [UML 정적 다이어그램]
- 행위 모델링 [UML 동적 다이어그램]
분류 | 설명 |
팬인 | - 특정 모듈을 호출하거나 참조하는 상위 모듈수 |
팬아웃 | - 특정 모듈을 호출하거나 참조하는 하위 모듈수 |
A 기준
팬인은 상위니까 없고, 팬아웃은 하위니까 2개
B 기준 상위는 하나있으니 펜인은 1 펜아웃은 2개
코드 설계
- 데이터를 효과적으로 분류,식별,추출에 용이한 숫자 또는 문자또는 기호
분류 | 설명 |
순차코드(Sequence code) | - 자료의 발생순,크기순,코드화 대상항목을 순서에 의해 순차적 부여 ex) 교실내 학생들 번호 |
블록코드(Block code) | - 공통 특징을 중심으로 별도 집단으로 분류하고 한집단 안에서 순서대로 부여 ex)시/군/구 |
10진코드(Decimal code) | -10진수 표현한 코드[배열이나 집계용이 , 코드의 범위확장 용이,자료 삽입의 추가 용이] |
그룹 분류 코드(Group Classifcation code) | - 대,중,소 분류별로 순서대로 부여하는 코드 |
연상 코드(Mnemonic code) | - 코드 대상의 명칭과 관계있는 문자,숫자,약어를 사용하여 의미를 쉽게 파악하게 만든 코드 - TV_2021_04 |
표의 숫자 코드(Significant digt code) | - 중량,면적,용량 등으로 물리적 수치를 이용하여 만든 코드 |
합성코드(Combined code) | - 두개이상의 코드를 조합하여 만든 코드 |
그외사항
코루틴
- 두개의 모듈이 같이 실행되면서 서로 호출하는 형태
코드로 이해하는 결합도
자료결합도 (Data Coupling)
<!-- 모듈1 -->
function module1(data) {
module2(data); // 값만 전달
}
<!-- 모듈2 -->
function module2(data) {
console.log("Received data: " + data);
}
module1(5); // 모듈1에서 5를 전달
값이 전달되며 모듈 간 상호작용이 이루어집니다.
스탬프 결합도 (Stamp Coupling)
<!-- 모듈1 -->
function module1(user) {
module2(user); // 객체 전달
}
<!-- 모듈2 -->
function module2(user) {
console.log("User: " + user.name + ", Age: " + user.age);
}
var userData = {name: "John", age: 30};
module1(userData); // 객체가 전달됨
구조화된 데이터(객체)가 모듈 간 전달됩니다.
제어 결합도 (Control Coupling)
<!-- 모듈1 -->
function module1(command) {
module2(command); // 제어 명령 전달
}
<!-- 모듈2 -->
function module2(command) {
if(command === "start") {
console.log("Starting process");
} else if(command === "stop") {
console.log("Stopping process");
}
}
module1("start"); // 제어 명령 전달
처리 방법에 대한 명령을 전달하여 제어합니다.
외부 결합도 (External Coupling)
<!-- 외부 변수 선언 -->
var externalData = "Shared data";
<!-- 모듈1 -->
function module1() {
console.log("Accessing external data: " + externalData);
}
<!-- 모듈2 -->
function module2() {
externalData = "Modified by module2";
}
module2();
module1(); // 외부 변수를 모듈 간에 참조하고 수정
외부에 선언된 변수를 다른 모듈에서 참조합니다.
공통 결합도 (Common Coupling)
<!-- 전역 변수 선언 -->
var globalVar = "Initial value";
<!-- 모듈1 -->
function module1() {
globalVar = "Updated by module1";
}
<!-- 모듈2 -->
function module2() {
console.log("Global variable: " + globalVar);
}
module1();
module2(); // 전역 변수를 여러 모듈이 공유하며 사용
여러 모듈이 전역 변수를 공유하며 수정합니다.
내용 결합도 (Content Coupling)
<!-- 모듈1 -->
function module1() {
this.internalVar = "Private data";
}
<!-- 모듈2 -->
function module2() {
var m1 = new module1();
m1.internalVar = "Modified by module2"; // module1의 내부 데이터 직접 수정
console.log(m1.internalVar);
}
module2(); // 다른 모듈이 내부 데이터에 접근하여 수정
모듈 간에 내부 변수를 직접 참조하고 수정합니다.
728x90
'정보처리기사 > 소프트웨어 설계' 카테고리의 다른 글
정보처리기사 필수 학습: 인터페이스 대상 식별 완전 정복!! (0) | 2024.10.15 |
---|---|
정보처리기사 필수 학습: 인터페이스 요구사항 완전 정복!! (1) | 2024.10.15 |
정보처리기사 필수 학습: 공통 모듈 설계 - 설계 모델링 완전 정복!! (0) | 2024.10.04 |
정보처리기사 필수 학습: 화면설계 완전 정복! (1) | 2024.10.04 |
정보처리기사 필수 학습: 분석 자동화 도구 완전 정복! (0) | 2024.10.01 |