UML (Unified Modeling Language) 클래스 간의 관계 정리

2024. 10. 13. 12:44·Category/정보처리기사
728x90

UML (Unified Modeling Language)에서 제공하는 클래스 간의 관계는 객체지향 설계를 시각화할 때 매우 중요합니다. 클래스 간의 관계는 시스템 내의 객체 간의 상호작용을 설명하고, 이들이 어떻게 서로 연결되는지를 나타냅니다. UML에서 제공하는 주요 클래스 사이의 관계는 다음과 같습니다:

1. Association (연관 관계)

  • 정의: 두 클래스 간에 기본적인 관계를 나타내며, 한 클래스가 다른 클래스의 객체를 참조하거나 상호작용하는 관계를 설명합니다. 예를 들어, 학생 클래스와 교수 클래스가 있을 때, '학생은 교수에게 배운다'는 형태로 표현됩니다.
  • 표현: 두 클래스 사이의 선으로 표현됩니다.
  • 종류:
    • 양방향 (Bidirectional): 두 클래스가 서로를 참조합니다.
    • 단방향 (Unidirectional): 한 클래스만 다른 클래스를 참조합니다.

2. Aggregation (집합 관계)

  • 정의: 한 클래스가 다른 클래스의 부분(파트)을 포함하는 관계를 나타냅니다. 두 클래스는 독립적으로 존재할 수 있지만, 한 클래스가 다른 클래스의 구성 요소로서 포함되는 관계입니다. 예를 들어, 자동차 클래스와 바퀴 클래스는 집합 관계입니다.
  • 표현: 빈 마름모(◇)로 표현되며, 전체(집합체)에서 부분(구성 요소)으로 이어지는 선으로 연결됩니다.
  • 예: 자동차는 바퀴를 가지고 있다 (자동차가 없더라도 바퀴는 여전히 존재할 수 있다).

3. Composition (합성 관계)

  • 정의: 집합 관계의 특수한 형태로, 전체(Whole)가 존재할 때만 부분(Part)이 존재하는 매우 강한 소유 관계를 나타냅니다. 예를 들어, 집 클래스와 방 클래스 간의 관계에서, 집이 없으면 방도 존재할 수 없습니다.
  • 표현: 채워진 마름모(◆)로 표현되며, 마름모는 전체 클래스 쪽에 위치합니다.
  • 예: 집은 방을 포함한다 (집이 없어지면 방도 함께 소멸된다).

4. Generalization (일반화 관계)

  • 정의: 상위 클래스와 하위 클래스 간의 관계를 나타내며, 하위 클래스가 상위 클래스의 특성을 상속받는 관계입니다. 즉, 상속 관계로, "is-a" 관계로도 불립니다. 예를 들어, 동물 클래스는 상위 클래스이고, 고양이와 강아지는 하위 클래스입니다.
  • 표현: 빈 삼각형 화살표로 표현되며, 화살표는 상위 클래스를 가리킵니다.
  • 예: 고양이는 동물이다 (고양이는 동물의 특성을 상속받는다).

5. Dependency (의존 관계)

  • 정의: 한 클래스가 다른 클래스에 의존하거나 영향을 받는 관계를 나타냅니다. 클래스 A가 클래스 B의 변경에 영향을 받는다면, A는 B에 의존하는 것입니다. 의존 관계는 짧은 시간 동안의 상호작용을 의미합니다.
  • 표현: 점선 화살표로 표현되며, 화살표는 의존하는 방향을 가리킵니다.
  • 예: 학생은 시험을 본다 (학생은 시험 클래스에 일시적으로 의존).

6. Realization (실체화 관계)

  • 정의: 인터페이스와 그것을 구현하는 클래스 간의 관계를 나타냅니다. 클래스는 인터페이스에 정의된 메서드를 실제로 구현하는 역할을 합니다.
  • 표현: 점선 화살표에 빈 삼각형으로 표현되며, 화살표는 인터페이스를 가리킵니다.
  • 예: 날수 있는 인터페이스는 새 클래스에 의해 구현된다 (새는 날 수 있는 기능을 구현).

7. Dependency Injection (의존성 주입)

  • 정의: 클래스가 다른 클래스의 인스턴스를 생성하지 않고, 외부에서 해당 객체를 주입받는 관계입니다. 종속성을 낮추고 테스트하기 쉽게 만드는 구조입니다.
  • 예: 자동차 클래스는 엔진을 생성하지 않고 외부에서 주입받는다.

요약:

  • Association: 두 클래스 간의 일반적인 관계.
  • Aggregation: 부분과 전체의 관계, 전체가 없어도 부분은 존재할 수 있음.
  • Composition: 부분과 전체의 관계, 전체가 없으면 부분도 소멸.
  • Generalization: 상속 관계, 하위 클래스가 상위 클래스의 특성을 상속받음.
  • Dependency: 한 클래스가 다른 클래스에 의존하는 관계.
  • Realization: 인터페이스와 구현 클래스 간의 관계.

요약 (일상적인 비유로):

  • 연관 관계: 두 사람이 서로 알고 있는 관계 (학생과 교사).
  • 집합 관계: 큰 물건이 작은 물건들로 이루어졌지만, 큰 물건이 없어도 작은 물건은 존재할 수 있음 (자동차와 바퀴).
  • 합성 관계: 큰 물건이 없으면 작은 물건도 없어지는 관계 (집과 방).
  • 일반화 관계 (상속): 부모-자식 관계처럼, 특성을 물려받는 관계 (동물과 고양이).
  • 의존 관계: 잠깐 다른 사람의 도움을 받는 관계 (학생과 도서관).
  • 실체화 관계: 계약을 맺고 그 계약을 실제로 지키는 관계 (날수 있는 기능을 구현하는 새).

UML 클래스 다이어그램에서 이 관계들은 클래스 간의 상호작용과 구조를 시각적으로 표현하는 데 필수적입니다.

728x90

'Category > 정보처리기사' 카테고리의 다른 글

ARP 스푸핑(ARP Spoofing)이란?  (0) 2024.10.13
OSI 7계층(OSI 7 Layer)이란?  (0) 2024.10.13
Visitor 패턴과 Decorator 패턴 이해하기  (0) 2024.10.13
Factory Method Pattern (팩토리 메서드 패턴)이란?  (0) 2024.10.13
UML (Unified Modeling Language) 다이어그램이란?  (1) 2024.10.12
'Category/정보처리기사' 카테고리의 다른 글
  • ARP 스푸핑(ARP Spoofing)이란?
  • OSI 7계층(OSI 7 Layer)이란?
  • Visitor 패턴과 Decorator 패턴 이해하기
  • Factory Method Pattern (팩토리 메서드 패턴)이란?
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (361) N
      • Category (354)
        • Algorithm (7)
        • SQL (2)
        • Java (4)
        • C (9)
        • React (7)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26)
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (22)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
        • 사이드 프로젝트 (1)
        • Note (80)
        • Socket (1)
        • 개인 정보 처리 방침 (1)
        • 면접 (0)
        • Vue.js (0)
      • Archive (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소프트웨어 버전 관리
    react router
    intellij 콘솔 한글 깨짐
    mermaid-cli
    ajax (asynchronous javascript and xml)
    structuredclone()
    원시값(primitive)
    named export vs default export
    시맨틱 버전(semantic versioning
    json.parse(json.stringify())
    semver)
    Jest
    core web vitals
    Collections
    쉽게 풀어쓴 C언어 Express
    jackson 라이브러리
    프로세스 강제 종료
    styled-components
    x.y.z (메이저.마이너.패치)
    public vs assets
    react
    중첩 함수(nested function)
    inp
    counter
    stdlib.h
    mcp server
    defaultdict
    math.h
    chrome extension 자동 배포
    useEffect
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
UML (Unified Modeling Language) 클래스 간의 관계 정리
상단으로

티스토리툴바