본문 바로가기
Dart/Dart Programming language

[고급] Dart고급 객체지향 프로그래밍/다중 상속과 인터페이스 구현

by Maccrey Coding 2024. 9. 10.
728x90
반응형

 

Dart는 객체지향 프로그래밍(OOP) 언어로서 다양한 기능을 제공합니다.

이 블로그에서는 Dart에서 다중 상속과 인터페이스를 구현하는 방법을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.

Dart는 다중 상속을 직접 지원하지 않지만, 인터페이스를 통해 유사한 기능을 구현할 수 있습니다.

이 글에서는 이러한 개념을 코드와 함께 자세히 설명합니다.

1. 다중 상속이란?

다중 상속은 하나의 클래스가 둘 이상의 부모 클래스를 상속받는 기능을 의미합니다.

그러나 Dart에서는 다중 상속을 직접적으로 지원하지 않습니다.

대신 Dart는 믹스인(Mixin)이라는 기능을 제공하여 비슷한 효과를 얻을 수 있습니다.

믹스인(Mixin) 사용하기

믹스인은 다른 클래스의 기능을 재사용할 수 있게 해주는 클래스입니다. 믹스인을 사용하면 여러 클래스의 기능을 조합하여 새로운 클래스를 만들 수 있습니다.

// 믹스인 정의
mixin Flyable {
  void fly() {
    print("날고 있습니다!");
  }
}

mixin Swimmable {
  void swim() {
    print("수영하고 있습니다!");
  }
}

// 클래스 정의
class Bird with Flyable {
  String name;

  Bird(this.name);

  void chirp() {
    print("$name가 지저귀고 있습니다.");
  }
}

class Fish with Swimmable {
  String name;

  Fish(this.name);

  void swim() {
    print("$name가 헤엄치고 있습니다.");
  }
}

void main() {
  Bird bird = Bird("참새");
  bird.fly(); // 날고 있습니다!
  bird.chirp(); // 참새가 지저귀고 있습니다.

  Fish fish = Fish("연어");
  fish.swim(); // 연어가 헤엄치고 있습니다.
}

 

  • mixin Flyable과 mixin Swimmable: Flyable과 Swimmable은 믹스인으로 정의되어 있으며, 각각 fly와 swim 메서드를 제공합니다.
  • class Bird with Flyable: Bird 클래스는 Flyable 믹스인을 사용하여 비행 기능을 추가합니다. chirp 메서드는 새가 지저귀는 동작을 정의합니다.
  • class Fish with Swimmable: Fish 클래스는 Swimmable 믹스인을 사용하여 수영 기능을 추가합니다. swim 메서드는 물속에서 헤엄치는 동작을 정의합니다.

2. 인터페이스란?

인터페이스는 클래스가 특정 메서드나 프로퍼티를 구현하도록 강제하는 계약입니다. Dart에서는 모든 클래스가 기본적으로 인터페이스 역할을 할 수 있습니다.

따라서 Dart에서는 implements 키워드를 사용하여 클래스를 구현할 수 있습니다.

인터페이스 구현하기

인터페이스를 구현할 때는 인터페이스에 정의된 모든 메서드를 클래스에서 오버라이드해야 합니다.

// 인터페이스 정의
abstract class Animal {
  void eat();
  void sleep();
}

// 인터페이스 구현
class Dog implements Animal {
  @override
  void eat() {
    print("개가 먹고 있습니다.");
  }

  @override
  void sleep() {
    print("개가 자고 있습니다.");
  }

  void bark() {
    print("개가 짖고 있습니다.");
  }
}

void main() {
  Dog dog = Dog();
  dog.eat(); // 개가 먹고 있습니다.
  dog.sleep(); // 개가 자고 있습니다.
  dog.bark(); // 개가 짖고 있습니다.
}

 

  • 이므로 직접 인스턴스를 생성할 수 없습니다.
  • class Dog implements Animal
    Dog 클래스는 Animal 인터페이스를 구현합니다. eat과 sleep 메서드를 오버라이드하여 개가 먹고 자는 동작을 정의합니다. 추가적으로 bark 메서드를 추가하여 개가 짖는 동작을 정의합니다.

3. 믹스인과 인터페이스의 차이점

  • 믹스인: 여러 클래스에서 공통된 기능을 재사용할 수 있게 해줍니다. 여러 믹스인을 조합하여 복합적인 기능을 만들 수 있습니다. 클래스가 믹스인을 사용하는 것은 다중 상속과 유사하지만, 실제로는 상속이 아닌 기능 추가에 가깝습니다.

  • 인터페이스: 특정 메서드나 프로퍼티를 클래스가 구현하도록 강제합니다. 인터페이스는 주로 클래스의 계약을 정의하는 데 사용됩니다. 인터페이스를 구현한 클래스는 해당 계약을 준수해야 합니다.

Dart에서 다중 상속은 직접 지원되지 않지만, 믹스인(Mixin) 기능을 통해 유사한 기능을 구현할 수 있습니다.

또한, 인터페이스는 클래스가 특정 메서드를 구현하도록 강제하는 계약을 정의하는 데 유용합니다.

이 두 가지 기능을 이해하고 활용하면 더 유연하고 강력한 객체지향 프로그래밍을 할 수 있습니다.

 

이 블로그가 Dart에서의 고급 객체지향 프로그래밍 개념을 이해하는 데 도움이 되길 바랍니다. 추가적인 질문이나 도움이 필요하시면 언제든지 말씀해 주세요!

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

728x90
반응형