Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

뭐라도 쓰겠지

25.03.28 / IS-A, HAS-A 본문

프로그래밍

25.03.28 / IS-A, HAS-A

김데피 2025. 3. 28. 15:41

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를 가지고 있다"라고 할 수 있을 때를 말한다. 각 관계는 클래스 설계 시 의도를 더 명확하게 나타낼 수 있는 중요한 개념이므로, 상황에 맞게 잘 선택해 사용하는 것이 좋겠다.