본문 바로가기
Dart/Dart Programming language

[초급] Dart 객체 지향 프로그래밍 기초: 상속 및 다형성

by Maccrey Coding 2024. 9. 5.
반응형

 

1. 상속 (Inheritance)

상속이란?

상속은 기존 클래스의 속성과 메서드를 새로운 클래스에서 재사용할 수 있게 해주는 개념입니다. 이를 통해 코드의 재사용성을 높이고, 계층 구조를 형성하여 유지보수를 쉽게 할 수 있습니다.

기본 상속

Dart에서는 extends 키워드를 사용하여 클래스를 상속할 수 있습니다. 상속받은 클래스는 부모 클래스의 모든 속성과 메서드를 상속받으며, 이를 확장하거나 수정할 수 있습니다.

class Animal {
  void eat() {
    print('This animal eats food.');
  }
}

class Dog extends Animal {
  void bark() {
    print('The dog barks.');
  }
}

void main() {
  Dog myDog = Dog();
  myDog.eat(); // 출력: This animal eats food.
  myDog.bark(); // 출력: The dog barks.
}

위의 예제에서 Dog 클래스는 Animal 클래스를 상속받아 eat 메서드를 그대로 사용하고, 추가로 bark 메서드를 정의합니다.

생성자 상속

자식 클래스는 부모 클래스의 생성자를 호출하여 초기화 작업을 수행할 수 있습니다. Dart에서는 super 키워드를 사용하여 부모 클래스의 생성자를 호출합니다.

class Animal {
  String name;

  Animal(this.name);
}

class Dog extends Animal {
  Dog(String name) : super(name);

  void bark() {
    print('The dog barks.');
  }
}

void main() {
  Dog myDog = Dog('Buddy');
  print(myDog.name); // 출력: Buddy
}

여기서 Dog 클래스는 Animal 클래스의 생성자를 호출하여 name을 초기화합니다.

2. 다형성 (Polymorphism)

다형성이란?

다형성은 동일한 인터페이스를 사용하여 다양한 클래스에서 서로 다른 구현을 제공하는 능력입니다. 다형성은 주로 메서드 오버라이딩(overriding)과 메서드 오버로딩(overloading)을 통해 구현됩니다.

메서드 오버라이딩

메서드 오버라이딩은 자식 클래스에서 부모 클래스의 메서드를 재정의하여 사용하는 것을 의미합니다. Dart에서는 부모 클래스의 메서드를 자식 클래스에서 같은 이름으로 정의하여 오버라이딩할 수 있습니다.

class Animal {
  void makeSound() {
    print('Animal makes a sound.');
  }
}

class Dog extends Animal {
  @override
  void makeSound() {
    print('The dog barks.');
  }
}

class Cat extends Animal {
  @override
  void makeSound() {
    print('The cat meows.');
  }
}

void main() {
  Animal myAnimal;

  myAnimal = Dog();
  myAnimal.makeSound(); // 출력: The dog barks.

  myAnimal = Cat();
  myAnimal.makeSound(); // 출력: The cat meows.
}

위의 예제에서 Dog와 Cat 클래스는 Animal 클래스의 makeSound 메서드를 각각 다르게 구현하고 있습니다. 이를 통해 동일한 메서드 호출로 서로 다른 결과를 얻을 수 있습니다.

메서드 오버로딩

Dart는 메서드 오버로딩을 직접 지원하지 않지만, 같은 이름의 메서드를 매개변수에 따라 다르게 정의하여 비슷한 기능을 구현할 수 있습니다. 다른 언어에서의 오버로딩과 달리, Dart에서는 이름이 같은 메서드를 여러 개 정의하는 대신, 매개변수를 통해 다형성을 구현합니다.

3. 요약

  • 상속: 부모 클래스의 속성과 메서드를 자식 클래스에서 재사용할 수 있게 해주는 기능입니다. extends 키워드를 사용하여 상속을 구현하며, super 키워드를 통해 부모 클래스의 생성자를 호출할 수 있습니다.
  • 다형성: 동일한 인터페이스를 통해 여러 클래스에서 다양한 구현을 제공할 수 있는 기능입니다. Dart에서는 메서드 오버라이딩을 통해 다형성을 구현하며, 메서드 오버로딩은 지원하지 않지만 매개변수를 통해 유사한 기능을 구현할 수 있습니다.

이 포스트가 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

 

반응형