뭐라도 쓰겠지
25.03.28 / IS-A, HAS-A 본문
IS-A 관계는 상속(Inheritance)를 통해 표현되며, 특정 클래스(자식)가 다른 클래스(부모)의 특성(속성, 메소드)을 물려받아 "~는 ~이다"라는 식으로 관계를 설명할 수 있을 때 사용한다. 예를 들어 Dog 클래스가 Animal 클래스를 상속받는 경우, "Dog는 Animal이다(Dog IS-A Animal)"라고 말할 수 있다.
public class Animal
{
public void Breathe()
{
Console.WriteLine("I can breathe.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Woof!");
}
}
HAS-A 관계는 어떤 클래스가 다른 클래스를 '가지고 있다(포함한다)'라는 의미의 "~는 ~를 가진다"라는 식으로 관계를 표현한다. 이는 일반적으로 클래스 내에 다른 클래스의 객체를 필드로 보유하거나, 속성으로 보유하여 나타낸다(합성 또는 집합).
예를 들어, Car 클래스가 Engine 객체를 필드로 가지고 있다면, "Car HAS-A Engine" 관계가 된다.
public class Engine
{
public void StartEngine()
{
Console.WriteLine("Engine started.");
}
}
public class Car
{
private Engine engine;
public Car()
{
engine = new Engine(); // Car는 Engine을 '가지고 있다'
}
public void StartCar()
{
engine.StartEngine();
}
}
정리하자면 IS-A 관계(상속)은 "A는 B이다"라고 할 수 있을 때, HAS-A 관계(구성/집합)은 "A는 B를 가지고 있다"라고 할 수 있을 때를 말한다. 각 관계는 클래스 설계 시 의도를 더 명확하게 나타낼 수 있는 중요한 개념이므로, 상황에 맞게 잘 선택해 사용하는 것이 좋겠다.
'프로그래밍' 카테고리의 다른 글
| 25.04.02 / 유니티? 언리얼? (0) | 2025.04.02 |
|---|---|
| 25.03.28 / 패턴 매칭(Pattern Matching) (0) | 2025.03.28 |
| 25.03.28 / 박싱(Boxing)과 언박싱(Unboxing) (0) | 2025.03.28 |
| 25.03.28 / LINQ(Language Integrated Query) (0) | 2025.03.28 |
| 25.03.28 / 템플릿(Template), 제네릭(Generic) (0) | 2025.03.28 |