Chap 06. 설계 원리

윤희빈·2026년 7월 22일

설계(Design)란?

  • 요구 분석: “무엇을 만들 것인가”
  • 설계: “어떻게 실현할 것인가”를 구체적으로 결정하는 활동
  • 설계는 2단계로 볼 수 있음
    1. 기본 구조 설계(아키텍처 설계): 모듈 역할/인터페이스 정의

    2. 상세 설계: 모듈 내부 알고리즘/데이터 명세화


1 설계 기본 개념

설계의 성격

  • 설계는 높은 수준의 의사결정 과정의 연속
  • 전통적 설계: 분할정복 / 추상화 / 합성 원리 적용
  • 최근: 아키텍처 기반 설계(아키텍처 이해가 핵심)

1.1 아키텍처 & 서브시스템

  • 아키텍처: 시스템 컴포넌트 + 컴포넌트 상호작용의 집합
  • 서브시스템(=모듈,컴포넌트): 복잡도를 줄이기 위해 시스템을 분할한 것

1.2 설계 관점

  • 모듈 관점: 책임을 구현한 코드 단위(모듈)와 관계

  • 컴포넌트 관점: 실행 시 동작하는 요소와 상호작용

  • 할당 관점: HW 설치/작업 할당/구현/데이터 저장 관점

1.3 설계 작업 과정

  • 설계는 의사결정 과정이면서 동시에 시스템을 알아가는 과정
  • 설계 과정 자체가 결과에 큰 영향을 줌


2 품질 목표(Quality Goals)

  • 품질 제약(비기능 요구)은 설계 목표가 될 수 있음
  • 비기능 요구를 설계 목표로 구체화하고, 이를 만족하는 설계안을 만들고 최적안 선택

설계 품질 목표

3 전통적인 설계 원리

핵심 목표

  • 효율성(Efficiency): 처리 시간 + 기억 공간
  • 단순성(Simplicity): 유지보수성에 큰 영향(가장 중요한 특성)

3.1 추상화(Abstraction)

  • 목적과 관련된 정보에 집중하고 나머지는 무시하는 관점
  • 데이터 관점/절차(동작) 관점으로 정의 가능
  • 클라이언트-서버 메시지 교환도 “추상화”로 볼 수 있음

3.2 캡슐화(Encapsulation)

  • 추상화된 대상이 제공하는 서비스를 쉽게 접근하게 하는 개념
  • 정보 은닉(Information hiding)

3.3 모듈화(Modularity)

  • 문제를 SW 구성요소 수준으로 분할하는 과정
  • SW를 작은 구성요소(패키지/클래스 등)로 나누는 것

3개 관계 요약

  • 추상화: 핵심 특성에 초점 → 큰 시스템 분할
  • 캡슐화: 분할된 핵심 정보만 노출
  • 결과적으로 잘 모듈화된 시스템 완성


3.4 결합(Coupling) (중요!!! 시험!!) 예시보고 맞추기

  • 모듈 간 의존 정도
  • 결합도를 높이는 요소
    1. 모듈 간 인터페이스 수
    2. 각 인터페이스의 복잡성(통신 유형)

결합 유형(나쁨 → 좋음) : 되도록이면 느슨할수록 좋다! (유지보수)

  • 내용 결합(Content): 다른 모듈의 “내용” 직접 참조
  • 공통 결합(Common): 전역 변수 공유/변경
  • 제어 결합(Control): 제어 흐름 경로 결정(플래그 등)
  • 스탬프 결합(Stamp): 복합 구조 전달(일부만 씀)
  • 데이터 결합(Data): 단순 타입(혹은 레코드 내 단순 필드)만 주고받음

3.5 응집도(Cohesion)

  • 한 모듈 내부 작업들이 서로 관련된 정도
  • 하나의 목적을 위해 붙어있는 것!
  • 높은 응집: 재사용/이해 쉬움, 수정 영향 적음

응집 유형(나쁨 → 좋음) : 응집이 강할수록 좋음!

  • 우연적(Coincidental): 의미적 관계 없음
  • 논리적(Logical): 같은 범주라 묶임(본질적으론 다름)
  • 시간적(Temporal): 특정 시간에 함께 수행돼 묶임
  • 절차적(Procedural): 수행 순서가 관련돼 묶임
  • 교환적(Communicational): 동일 데이터 조작 때문에 묶임
  • 기능적(Functional): 하나의 기능에 모두 기여(가장 이상적)

4 객체지향 설계 원리 (SOLID):예시보고 맞추기

  • 상속/인터페이스 등 OO 구문과 함께 발전

인터페이스와 구현의 분리

  • 인터페이스: 공개 메소드의 프로토타입 정의
  • 구현과 분리하여 공개 인터페이스만 노출

SOLID 5원칙

  • SRP 단일 책임
  • OCP 개방-폐쇄
  • LSP 리스코프 교체
  • ISP 인터페이스 분리
  • DIP 의존관계 역전

4.1 SRP 단일 책임

클래스 변경 이유를 1개로 제한(역할/책임 단일화)

4.2 OCP 개방-폐쇄

확장에는 열려있고 수정에는 닫혀있어야(상속/다형성 활용)

  • 상속에는 열려있지만 클라이언트에게는 닫혀있어야한다!

4.3 LSP 리스코프 치환

하위 타입은 상위 타입을 동작 깨지지 않게 대체 가능해야

4.4 ISP 인터페이스 분리

사용하지 않는 인터페이스를 강제로 구현하면 안 됨(비만/오염 인터페이스)

4.5 DIP 의존관계 역전

구체 모듈이 추상 모듈에 의존하도록(의존 방향 역전)

5 설계 메트릭(Design Metrics)

전통적 메트릭

  • 크기(Size)
  • 복잡도(Complexity)
  • 결합도(Coupling)
  • 응집도(Cohesion)
  • 정보흐름(Information flow)

객체지향 메트릭


profile
비니비니히비니의 정리블로그

0개의 댓글