관리 메뉴

DevBlackCat

정보처리기사 필수 학습: 공통 모듈 설계 (2) 완전 정복!! 본문

정보처리기사/소프트웨어 설계

정보처리기사 필수 학습: 공통 모듈 설계 (2) 완전 정복!!

DevBlackCat 2024. 10. 7. 21:48
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