Component-Level Design

Ray·2023년 4월 28일
0
post-thumbnail

🧩 What is Component?

  • 컴포넌트의 정의 (OMG UML Specification)
    "a modular, deployable, and replaceable part of a system that encapsulates implementation and exposes a set of interfaces"
    👉구현을 캡슐화하고, 일련의 인터페이스를 노출하는, 모듈식이고, 배포 가능하며, 교체 가능한, 시스템의 일부
  1. 객체지향 관점 (Object-Oriented view)
    : 컴포넌트는 협력하는 클래스들의 집합을 포함

  2. 전통적인 관점 (traditional view)
    : 처리(processing) 로직, 처리 로직 구현을 위해 필요한 내부 자료구조, 컴포넌트의 호출, 데이터 전달을 가능하게 하는 인터페이스

  3. 프로세스 관련 관점 (process-related view)
    : 재사용 가능한 소프트웨어 컴포넌트 또는 설계 패턴을 (컴포넌트 기반 소프트웨어공학) 카탈로그에서 선택하여 시스템 구축


🧩 Class-based Component-Level Design


🧩 Traditional Component-Level Design


🧩 Basic Component Design Principles

  • Open-Closed Principle (OCP) : 개방-폐쇄 원칙
    : 모듈(컴포넌트)은 확장을 위해 열려있어야 하지만, 수정을 위해서 닫혀있어야 한다.

  • Release Reuse Equivalence Principle (REP)
    : 재사용의 단위(granule)은 릴리즈의 단위이다

  • Common Closure Principle (CCP)
    : 함께 변하는 클래스는 함께 속한다

  • Common Reuse Principle (CRP)
    : 함께 재사용되지 않는 클래스는 같이 그룹화해서는 안 된다


🧩 Component-Level Design Guidelines

  • 컴포넌트
    • 아키텍처 모델의 일부로 지정된 컴포넌트에 대한 명명 규칙 재정 후 컴포넌트 수준의 모델의 일부로 정제하고 구체화
    • 아키텍처 컴포넌트 이름은 문제 도메인에서 도출되어야 하며 모든 이해관계자에게 의미를 부여해야 함
    • 인프라구조 컴포넌트 또는 진화된 컴포넌트 수준 클래스는 구현 특정 의미를 반영하며 명명해야 함
    • 상세 설계 수준에서 컴포넌트의 본질을 식별하기 위해 스테레오타입(stereotype) 사용 가능
    • e.g., <<infrastructure>> <<database>> <<table>>
  • 인터페이스

    • 소통(communication) 및 협업에 대한 중요 정보 제공
    • 개방-폐쇄 원칙(OCP) 달성에 도움이 됨
  • 종속성(dependencies)과 상속(inheritance)

    • 가독성(readability)을 높이기 위해 왼쪽에서 오른쪽으로 종속성 모델링, 아래(derived) 클래스에서 위(base) 클래스로 상속 관계를 모델링

🧩 Cohesion

  • 전통적인 관점 (traditional view)
    : 모듈의 "single-mindedness"

  • 객체지향 관점 (object-oriented view)
    : 컴포넌트나 클래스는 서로 밀접하게 관련된 속성과 연산만 캡슐화

  • 응집력(cohesion)의 수준

    • 기능적(funcitonal) : 주로 연산에 의해 나타나며, 컴포넌트가 목표 연산을 수행하고 결과를 반환
    • 계층적(layerd) : 패키지, 컴포넌트, 클래서에 의해 나타나며, 상위 계층은 하위 계층의 서비스에 접근하지만, 하위 계층은 상위 계층에 접근하지 않음
      교환적(communicational) : 동일한 데이터에 접근하는 모든 연산이 단일 클래스에서 정의 (클래스는 해당 데이터에 접근 및 저장에만 초점을 둠)

🧩 Coupling

  • 전통적인 관점 (traditional view)
    : 컴포넌트가 다른 컴포넌트와 외부 세계에 연결되는 정도

  • 객체지향 관점 (object-oriented view)
    : 클래스 사이 연결 정도에 대한 정성적 척도

  • 결합도(coupling)의 수준

    • 내용(content) : 한 컴포넌트가 다른 컴포넌트의 내부 데이터를 은밀히(surreptitiously) 수정 - 정보 은닉의 위배
    • 외부(external) : 한 컴포넌트가 인프라(infrastructure) 컴포넌트와 통신 및 협력
    • 제어(control) : 제어신호(control flag)가 컴포넌트에 전달되어 논리적 흐름 지시

profile
iOS Developer

0개의 댓글