Base

클래스 다이어그램에서의 IsA, HasA

Dr.Mlem 2024. 12. 13. 14:40
Q1.
클래스 다이어그램을 짜려고 알아보고 있던 와중, IsA 관계, HasA 관계라는 것을 봤어. 해당 내용은 어떤 관계에 적용되는 내용이지?
 
 
 
A1.

ChatGPT의 말:

클래스 다이어그램에서 IsA 관계와 HasA 관계는 객체지향 설계에서 클래스 간의 관계를 나타내는 주요 개념입니다. 각각의 의미와 적용되는 상황을 간단히 정리하면 다음과 같습니다.


1. IsA 관계

  • 정의: 클래스 간의 상속(Inheritance) 관계를 나타냅니다.
  • 의미: 한 클래스가 다른 클래스의 **일종(kind of)**인 경우를 의미합니다.
  • 적용 상황: 자식 클래스가 부모 클래스의 모든 속성과 동작(메서드)을 물려받아야 하는 경우.
  • UML 표기법: 일반적으로 **빈 화살표 머리(삼각형)**로 표시하며, 자식 클래스에서 부모 클래스 방향으로 연결합니다.

예시:

  • **동물(Animal)**과 강아지(Dog):
    • 강아지는 동물이다. (Dog IsA Animal)
    • Animal 클래스가 부모 클래스이고, Dog 클래스는 이를 상속받아 추가적인 특성을 정의할 수 있습니다.
Animal
  ▲
  │
Dog

2. HasA 관계

  • 정의: 클래스 간의 구성(Composition) 또는 집합(Aggregation) 관계를 나타냅니다.
  • 의미: 한 클래스가 다른 클래스를 **소유(Has)**하거나 포함하는 경우를 의미합니다.
  • 적용 상황: 객체의 속성으로 다른 객체를 가지고 있는 경우.
    • Composition: 포함된 객체가 소유자 객체에 강하게 결합되어 생명 주기를 공유하는 경우.
    • Aggregation: 포함된 객체가 독립적인 생명 주기를 가지는 경우.
  • UML 표기법:
    • Composition: 채워진 마름모로 표시.
    • Aggregation: 비어 있는 마름모로 표시.

예시:

  • **자동차(Car)**와 엔진(Engine):
    • 자동차는 엔진을 가진다. (Car HasA Engine)
    • Car 클래스는 Engine 클래스를 속성으로 가집니다.
Car ◇── Engine    (Aggregation)
Car ◆── Engine    (Composition)

주요 차이점

구분 IsA 관계 HasA 관계
설명 클래스 간의 상속 관계 클래스 간의 포함 관계
유형 상속 (Inheritance) 집합 또는 구성 (Aggregation/Composition)
예시 "A는 B이다" (e.g., 강아지는 동물이다) "A는 B를 가진다" (e.g., 자동차는 엔진을 가진다)

정리

  • IsA 관계는 "상속"을 나타내며, 일반화된 부모 클래스로부터 특정한 자식 클래스가 파생됩니다.
  • HasA 관계는 "구성" 또는 "집합"을 나타내며, 객체가 다른 객체를 포함하거나 소유하는 관계입니다.

어떤 관계를 사용할지 결정하려면, 설계하려는 클래스 간의 관계가 본질적으로 상속인지 포함인지 고민해보는 것이 중요합니다.

'Base' 카테고리의 다른 글

API가 뭐야?  (1) 2024.12.16
프로젝트 디렉토리 또는 위치 변경  (0) 2024.12.16
"동적"이란게 뭐지?  (0) 2024.12.11
재할당 불가와 참조 불변성의 차이  (0) 2024.12.04
시스템/웹에서의 경로  (0) 2024.12.02