Flutter inheritance

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
}

이 예제에서는 DogCat 클래스가 모두 Animal 클래스를 상속받습니다. Animal 타입의 변수 myDogmyCat은 각각 DogCat 객체를 참조합니다. 메서드 호출 시 실제 객체의 메서드가 호출됩니다. 이것이 다형성입니다.

인터페이스

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)로 선언되었으며, DogCat 클래스는 Animal을 구현(implements)합니다. 이로 인해 DogCat 클래스는 Animal 인터페이스를 따르게 됩니다.

결론

상속과 다형성은 객체 지향 프로그래밍의 기본 개념으로, 코드의 재사용성과 확장성을 높이는 데 중요한 역할을 합니다. Dart에서 상속을 통해 기존 클래스를 확장하고, 다형성을 통해 유연한 코드 구조를 만들 수 있습니다. 이를 통해 더 나은 설계와 유지보수 가능한 코드를 작성할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *