7. is와 has 다중상속

강재영's avatar
Sep 27, 2024
7. is와 has 다중상속

ishas 관계

  1. is 관계 (상속)
      • is 관계는 상속(Inheritance) 관계를 의미합니다. 즉, 강아지는 동물이다 라는 식의 관계
  1. has 관계 (구성 또는 포함)
      • has 관계는 **구성(Composition)**을 의미합니다. 즉, Sonata는 Engine을 가지고 있다라는 개념
 
 

1. is관계

class Animal { void breathe() => print("숨을 쉰다"); } class Cat extends Animal { void meow() => print("야옹"); } class Dog extends Animal { void bark() => print("멍멍"); } void main() { Cat cat = Cat(); Dog dog = Dog(); print(cat is Animal); // true: Cat은 Animal이다. print(dog is Animal); // true: Dog은 Animal이다. cat.breathe(); // 상속받은 메서드 사용 가능 dog.breathe(); // 상속받은 메서드 사용 가능 }
 
  • 여기서 **Cat*과 **Dog*는 **Animal*의 is-a 관계입니다. 즉, 고양이는 동물이다, 강아지는 동물이다라는 개념입니다.
  • is 관계에서는 상속을 통해 부모 클래스의 특성과 기능을 물려받습니다. 즉, 고양이와 강아지는 동물의 모든 특성을 가지고 있는 하위 클래스입니다.
 

2. has 관계

class Engine { int power = 500; } class Car { final Engine engine; Car(this.engine); // 생성자에서 엔진을 주입받음 } void main() { Engine v8Engine = Engine(); Car sonata = Car(v8Engine); print(sonata.engine.power); // Sonata는 엔진을 가지고 있다 }
  • 여기서 **Car*는 **Engine*을 포함합니다. 즉, 소나타는 엔진을 가지고 있다는 의미가 됩니다.
  • has-a 관계는 객체를 내부적으로 포함하여, 다른 객체의 기능을 구성 요소로 사용합니다. 이것은 상속과는 달리 객체들이 독립적으로 존재하면서 서로를 포함하는 개념입니다.
 

차이점 정리:

  1. is-a 관계 (상속):
      • 한 클래스가 다른 클래스를 상속받아 부모 클래스의 기능을 물려받는 관계입니다.
      • 예시: 고양이는 동물이다., 강아지는 동물이다.
      • 부모 클래스의 모든 기능과 속성을 상속받으며, 이 관계를 통해 다형성이 구현됩니다.
  1. has-a 관계 (구성):
      • 한 클래스가 다른 클래스의 객체를 필드로 포함하여, 그 객체의 기능을 사용하는 관계입니다.
      • 예시: 소나타는 엔진을 가지고 있다., 집은 문을 가지고 있다.
      • 독립적인 객체들이 서로 관계를 가지며, 생성자 주입 등을 통해 다른 객체의 기능을 사용할 수 있습니다.

  • *is 관계*는 상속을 의미하며, **"고양이는 동물이다"**와 같은 상속 구조를 설명합니다.
  • *has 관계*는 구성을 의미하며, **"소나타는 엔진을 가지고 있다"**처럼 한 클래스가 다른 클래스를 포함하는 관계를 설명합니다.
 
 
 
Share article

강재영 블로그