Flutter 상속과 다형성 / Flutter inheritance and polymorphism
Dart에서 상속과 다형성은 객체 지향 프로그래밍의 중요한 개념으로, 코드의 재사용성과 확장성을 높이는 데 중요한 역할을 합니다. 다음은 Dart에서 상속과 다형성을 사용하는 방법에 대한 설명과 예제입니다.
상속
상속은 한 클래스가 다른 클래스의 속성과 메서드를 물려받는 것을 의미합니다. 상속을 통해 기존 클래스를 확장하여 새로운 기능을 추가하거나 기존 기능을 재정의할 수 있습니다.
예제
class Animal {
void makeSound() {
print('Animal makes a sound');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Dog barks');
}
}
void main() {
Dog dog = Dog();
dog.makeSound(); // Output: Dog barks
}
이 예제에서 Dog
클래스는 Animal
클래스를 상속받습니다. Dog
클래스는 makeSound
메서드를 재정의(override
)하여 자신만의 구현을 제공합니다.
다형성
다형성은 동일한 인터페이스를 사용하여 다른 데이터 타입을 처리할 수 있는 능력을 의미합니다. 이는 일반적으로 상속을 통해 구현됩니다. 다형성을 통해 객체는 자신이 속한 클래스뿐만 아니라 부모 클래스나 인터페이스 타입으로도 참조될 수 있습니다.
예제
class Animal {
void makeSound() {
print('Animal makes a sound');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Dog barks');
}
}
class Cat extends Animal {
@override
void makeSound() {
print('Cat meows');
}
}
void main() {
Animal myDog = Dog();
Animal myCat = Cat();
myDog.makeSound(); // Output: Dog barks
myCat.makeSound(); // Output: Cat meows
}
이 예제에서는 Dog
와 Cat
클래스가 모두 Animal
클래스를 상속받습니다. Animal
타입의 변수 myDog
와 myCat
은 각각 Dog
와 Cat
객체를 참조합니다. 메서드 호출 시 실제 객체의 메서드가 호출됩니다. 이것이 다형성입니다.
인터페이스
Dart에서는 명시적인 인터페이스가 없습니다. 대신, 모든 클래스는 암시적으로 인터페이스를 정의합니다. 클래스는 다른 클래스를 구현(implement)하여 인터페이스 역할을 할 수 있습니다.
예제
abstract class Animal {
void makeSound();
}
class Dog implements Animal {
@override
void makeSound() {
print('Dog barks');
}
}
class Cat implements Animal {
@override
void makeSound() {
print('Cat meows');
}
}
void main() {
Animal myDog = Dog();
Animal myCat = Cat();
myDog.makeSound(); // Output: Dog barks
myCat.makeSound(); // Output: Cat meows
}
이 예제에서 Animal
클래스는 추상 클래스(abstract class
)로 선언되었으며, Dog
와 Cat
클래스는 Animal
을 구현(implements
)합니다. 이로 인해 Dog
와 Cat
클래스는 Animal
인터페이스를 따르게 됩니다.
결론
상속과 다형성은 객체 지향 프로그래밍의 기본 개념으로, 코드의 재사용성과 확장성을 높이는 데 중요한 역할을 합니다. Dart에서 상속을 통해 기존 클래스를 확장하고, 다형성을 통해 유연한 코드 구조를 만들 수 있습니다. 이를 통해 더 나은 설계와 유지보수 가능한 코드를 작성할 수 있습니다.