프로그래밍 언어/Dart

Dart 상속과 다형성: 예제 코드로 배우는 객체 지향 프로그래밍 - Dart 기초 #10

eco7T 2024. 6. 12. 07:24
반응형

이번에는 Dart 프로그래밍 언어의 상속(Inheritance)과 다형성(Polymorphism)에 대한 개념을 설명하고, 이들을 사용함에 있어 이해하기 쉽게 예시 코드를 통해 이러한 개념을 학습할 수 있도록 작성되었습니다. 코드 재사용성을 높이고, 다양한 형태의 객체를 다룰 수 있는 다형성의 장점을 설명하여 Dart의 객체 지향 프로그래밍의 기본을 학습할 수 있도록 정리해 봤습니다.

Dart 상속과 다형성
Dart 상속과 다형성

 

Dart 상속과 다형성

상속 (Inheritance)

상속은 코드 재사용성을 높이기 위한 객체 지향 프로그래밍의 주요 개념입니다. 상속을 통해 기존 클래스의 속성과 메서드를 새로운 클래스에 물려받을 수 있습니다. 이렇게 하면 코드 중복을 줄일 수 있고, 새로운 클래스에 추가적인 기능을 더할 수 있습니다.

 

예시 코드

// 부모 클래스 (Super Class) class Animal { String name; int age; Animal(this.name, this.age); void eat() { print('$name is eating.'); } } // 자식 클래스 (Sub Class) class Dog extends Animal { String breed; Dog(String name, int age, this.breed) : super(name, age); void bark() { print('$name is barking.'); } } void main() { Dog dog = Dog('Buddy', 3, 'Labrador'); dog.eat(); // Buddy is eating. dog.bark(); // Buddy is barking. }

위 예시에서  Dog  클래스는  Animal  클래스를 상속받고 있습니다.  Dog  클래스는  Animal  클래스의  name  과  age  속성,  eat()  메서드를 물려받았습니다. 또한  breed  속성과  bark()  메서드를 추가로 정의했습니다.

 

주요 키워드

  •  extends : 클래스 상속을 위한 키워드입니다.
  •  super : 부모 클래스의 생성자를 호출하거나 부모 클래스의 속성과 메서드에 접근할 때 사용합니다.

 

다형성 (Polymorphism)

다형성은 하나의 객체가 여러 가지 형태를 가질 수 있다는 의미입니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있습니다. Dart에서는 메서드 오버라이딩과 매개변수 다형성을 지원합니다

.

메서드 오버라이딩 (Method Overriding)

자식 클래스에서 부모 클래스의 메서드를 재정의하는 것을 말합니다. 이렇게 하면 동일한 메서드 이름을 사용하더라도 각 클래스에 맞는 독립적인 동작을 정의할 수 있습니다.

class Animal { void makeSound() { print('The animal makes a sound.'); } } class Dog extends Animal { void makeSound() { print('The dog barks.'); } } class Cat extends Animal { void makeSound() { print('The cat meows.'); } } void main() { Animal animal = Animal(); animal.makeSound(); // The animal makes a sound. Dog dog = Dog(); dog.makeSound(); // The dog barks. Cat cat = Cat(); cat.makeSound(); // The cat meows. }

위 예시에서  Dog 와  Cat  클래스는  Animal  클래스의  makeSound()  메서드를 각각 오버라이딩하여 독립적인 동작을 정의했습니다.

매개변수 다형성 (Parametric Polymorphism)

하나의 엔티티(함수 또는 클래스)가 다양한 타입의 객체를 허용하는 것을 말합니다. Dart에서는 제네릭(Generics)을 통해 매개변수 다형성을 구현합니다.

class Box<T> { T item; Box(this.item); T getItem() { return item; } } void main() { Box<int> boxInt = Box<int>(10); int intItem = boxInt.getItem(); // intItem = 10 Box<String> boxString = Box<String>('Hello'); String stringItem = boxString.getItem(); // stringItem = 'Hello' }

위 예시에서  Box  클래스는 제네릭  T 를 사용하여 다양한 타입의 객체를 허용합니다.  Box<int> 는 정수 타입의 객체를,  Box<String> 은 문자열 타입의 객체를 다룰 수 있습니다.

 

이와 같이 Dart에서는 상속과 다형성을 통해 코드의 재사용성과 유연성을 높일 수 있습니다. 

반응형