[소프트웨어설계] 공통 모듈

thingzoo·2024년 1월 24일
0
post-thumbnail

공통 모듈

자주 사용하는 기능들을 다시 사용할 수 있도록 하나의 패키지로 제공하는 독립된 모듈

재사용 범위에 따른 분류⭐️

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

재사용의 대표적인 사례

  • 라이브러리: 소프트웨어 개발, 사용, 유지보수를 돕도록 설계한 관련문서와 소프트웨어의 집합
  • 디자인패턴: 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법중 하나
  • 프레임워크: 애플리케이션 개발에 바탕이 되는 클래스들과 인터페이스의 집합
  • 컴포넌트: 재사용이 가능한 각각의 독립된 모듈, 인터페이스 통해서만 접근 가능
  • 코루틴: 서로 대칭적인 방식으로 동작하는 함수로, 한 코루틴이 중단될 때 다른 코루틴이 시작되며 과정 반복

공통 모듈 작성 원칙⭐️

(20.6)

  • 정확성: 모듈의 기능은 실제로 필요한지 확인하여 정확하게 작성
  • 명확성: 모듈의 기능은 일관된 이해와 하나로 해석될 수 있도록 작성
  • 완전성: 모듈은 시스템의 구현에 필요한 모든 요구사항을 포함해야함
  • 일관성: 여러 공통 기능들 간의 상호작용을 고려하여 충돌이 발생하지 않도록 작성
  • 추적성: 모듈의 기능과 관련된 요구사항의 출처나 관련된 다른시스템 구성요소와의 관계를 알 수 있도록 작성해야함

모듈 설계

  • 응집도는 높고, 결합도는 낮게

모듈화

개념

  • 프로그램이 효율적으로 관리 될 수 있도록 시스템을 분해하고 추상화함
  • 소프트웨어 제품의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리를 용이하게 하는 기법

필요성

  • 프로그램의 효율적인 관리 및 성능향상
  • 한 기능에 대한 복잡도 감소로 프로그램 개발의 용이
  • 프로그램 재사용을 통한 개발 및 유지보수 용이
  • 오류 파급효과 최소화
  • 단위당 프로그램 개발 노력/비용 최소화

응집도(Cohesion)⭐️⭐️

  • 모듈 내부에서 구성요소 간에 밀접한 관계를 맺고 있는 정도
  • 응집도가 높을 수록
    • 필요한 요소들로 구성됨

응집도 유형

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

결합도(Coupling)⭐️⭐️

  • 모듈과 모듈 간의 관련성/의존성 정도
  • 결합도가 낮을 수록
    • 모듈의 독립성이 높아 모듈 간 영향이 적어짐

결합도 유형

  • 자료(Data): 모듈 간의 인터페이스로 값이 전달되는 경우
  • 스탬프(Stamp): 모듈 간 인터페이스로 배열 등 자료구조가 전달되는 경우
  • 제어(Control): 단순 처리할 대상인 값만 전달되는 게 아닌, 어떻게 처리해야한다는 제어요소가 전달되는 경우
  • 외부(External): 어떤 모듈에서 선언한 변수를 외부의 다른 모듈에서 참조하는 경우
  • 공통(Common): 파라미터가 아닌 모듈 밖에서 선언된 전역변수를 참조하고 갱신하는 식으로 상호작용하는 경우
  • 내용(Content): 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우
    ➥ 결합수준: 료<탬프<어<부<통<

fan-in, fan-out

  • 모듈의 복잡도와 상호작용을 분석하는데 사용되는 지표
  • 시스템 복잡도 최적화를 위해서는, Fan-In은 높고 Fan-Out은 낮게

Fan-In

  • 특정 모듈을 호출하거나 참조하는 상위 모듈의 수
  • 해당 모듈의 중요성이나 재사용이 높음을 나타냄

Fan-Out

  • 특정 모듈이 호출하거나 참조하는 하위 모듈의 수
  • 해당 모듈이 여러 다른 모듈들과 상호작용이 많음을 나타냄

코드 설계

코드의 기능

  • 식별
  • 분류
  • 배열
  • 기타: 표준화, 간소화, 연상, 암호화

코드의 유형⭐️

(20.6,8)

  • 순차 코드: 일정한 순서에 따라 차례로 일련번호 부여
  • 블록 코드: 공통성이 있는 것끼리 블록으로 구분, 각 블록내 일련번호 부여
  • 10진 코드: 10진수 형태
  • 그룹 분류 코드: 대상 항목에 대한 분류 기준에 따라 대/중/소분류, 각 그룹내 일련번호 부여
  • 연상 코드: 코드 대상의 명칭과 관계있는 숫자, 문자, 기호 등을 코드로 부여
  • 표의 숫자 코드: 중량, 면적, 용량 등의 물리적 수치 이용
  • 합성 코드: 두 개 이상 코드 조합
profile
공부한 내용은 바로바로 기록하자!

0개의 댓글