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.
'Dart > Dart Programming language' 카테고리의 다른 글
[고급] Dart 고급 주제 및 최신 트렌드/Null Safety와 Sound Null Safety (0) | 2024.09.11 |
---|---|
[고급] Dart고급 객체지향 프로그래밍/ DI(Dependency Injection)와 서비스 로케이터 패턴 (0) | 2024.09.10 |
[고급] Dart고급 객체지향 프로그래밍/디자인 패턴(싱글톤, 팩토리, 옵저버 등) 적용 (0) | 2024.09.10 |
[고급] Dart 메모리 관리 및 최적화: 메모리 누수 방지 기법 (1) | 2024.09.09 |
[고급] Dart 메모리 관리 및 최적화/가비지 컬렉션(Garbage Collection) 이해하기 (0) | 2024.09.09 |