본문 바로가기
컴퓨터과학/소프트웨어공학

[소프트웨어공학] 설계 1 - 추상화, 모듈화, 정보은닉, 응집력, 결합도

by 윤호 2021. 5. 11.

Github로 보기


상위 설계와 하위 설계

상위 설계

  • 아키텍처 설계, 예비 설계라고 함
  • 소프트웨어 구성 컴포넌트들 간의 관계로 구성된 시스템의 전체적인 구조
  • 시스템 구조도, 외부 파일 및 DB 설계도, 화면 및 출력물 레이아웃 등을 포함

하위 설계

  • 모듈 설계, 상세 설계라고 함
  • 시스템의 각 구성 요소들의 내부 구조, 동적 행위 등을 결정
  • 하위 설계 방법
    • 절차기반(Procedure-Oriented), 자료위주(Data-Oriented), 객체지향(Object-Oriented) 설계 방법

설계 프로세스

좋은 설계란

  • 요구사항 명세서의 모든 내용을 구현해야 함
  • 구현 또는 테스트로 추적이 가능해야
  • 유지 보수 시 변경이 용이해야 함

설계 방식

  • 프로세스 지향 설계 (Process Oriented Design)
  • 객체 지향 설계 (Object Oriented Design)

image-20210504142205248.png

설계 원리

추상화

  • 의미: 자세한 구현 전에, 상위 레벨에서 제품의 구현을 먼저 생각해보는 것
  • 과정 추상화
    • 자세한 단계를 고려하지 않고 상위 수준에서 수행 흐름만 먼저 설계
  • 데이터 추상화
    • 데이터 구조를 대표할 수 있는 표현으로 대체하는 것
    • ex) 날짜 구조를 단순히 "날짜"로 추상화
  • 제어 추상화
    • 3-A와 3-B를 “3. 윤년 여부에 따라 요일 계산을 수행한다.”로 추상화 하는 것

예제: 원하는 날짜를 입력으로 받아 요일을 알려주는 만년 달력 프로그램

image-20210504142718149.png

단계적 분해

  • 문제를 상위 개념 부터 더 구체적인 단계로 분할하는 탑다운 기법의 원리
  • 모듈에 대한 구체 설계를 할 때 사용

모듈화

  • 모듈의 의미

    • 수행 가능 명령어, 자료구조 또는 다른 모듈을 포함하고 있는 독립 단위
  • 특성

    • 이름을 가짐
    • 독립적으로 컴파일
    • 다른 모듈을 사용할 수 있음
    • 다른 프로그램에서 사용될 수 있음

효과적인 모듈 설계

정보 은닉

  • 인터페이스를 통해서만 메시지를 전달 할 수 있도록 하는 개념
  • 자바에서 private과 public
    • private은 모듈 내에서 사용하기 때문에 바꿔도 다른 모듈에 영향 X

장점

  • 모듈의 구현을 독립적으로 맡길 수 있음
  • 설계 과정에서 하나의 모듈이 변경되더라도 설계에 영향을 주지 않음

모듈의 응집력

  • 모듈을 이루는 각 요소들의 서로 관련되어 있는 정도
  • 강한 응집력을 갖는 모듈을 만드는 것이 모듈 설계의 목표

응집력의 종류 (밑으로 갈수록 응집력 약함, 응집력이 약하면 안좋음)

  • 기능적 응집: 잘 정의된 하나만의 기능만을 수행
  • 교환적 응집: 2개 이상의 기능이 존재하고 단계별 순서에 의해서만 수행, 각 기능은 동일한 입력 다른 출력
  • 절차적 응집: 입출력을 공유하지 않지만 순서에 따라 수행될 필요가 있는 경우
  • 시간적 응집: 초기화 같이 한 번만 수행되는 요소들이 포함된 형태
  • 논리적 응집: 비슷한 성격을 갖거나 특정 형태로 분류되는 처리 요소
  • 우연적 응집: 아무 관련 없는 처리 요소들로 형성

모듈의 결합도

  • 모듈간에 연결되어 상호 의존하는 정도
  • 낮은 결합도를 갖는 모듈(Loosely coupled)을 만드는 것이 목표
  • 결합도가 강하면 유지보수가 힘들어짐

모듈간의 의존도(아래로 갈수록 결합도 강함, 결합도가 강하면 안좋음)

  • 자료 결합: 모듈 간의 인터페이스가 자료 요소로만 구성된 경우
  • 구조 결합: 모듈간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달되는 경우
  • 제어 결합: 제어 요소(function code, switch, tag 등)를 전달하는 경우
  • 공통 결합: 여러 모듈이 공동 자료 영역을 사용하는 경우
  • 내용 결합: 한 모듈이 다른 모듈의 일부분을 직접 참조 또는 수정하는 경우

reference

  • 상명대학교 한종대교수님 소프트웨어공학 수업

댓글