본문 바로가기
Dart/Study

Dart에서 클래스 상속 및 다형성 이해하기

by Maccrey Coding 2024. 7. 12.
728x90
반응형

Dart는 객체 지향 프로그래밍(OOP)을 지원하는 언어로, 상속과 다형성을 통해 코드를 효율적으로 구성하고 관리할 수 있도록 강력한 기능을 제공합니다.

이 블로그 게시글에서는 Dart에서 상속, 오버라이딩, 인터페이스, 추상 클래스를 다루며 클래스의 상속과 다형성에 대한 심층적인 이해를 제공합니다.

1. 상속(Inheritance)

상속은 클래스가 다른 클래스의 속성과 메서드를 물려받는 개념입니다.

상속을 통해 코드 재사용성을 높이고 코드 유지 관리를 용이하게 할 수 있습니다.

 

상속 구문

class ParentClass {
  // 속성 및 메서드
}

class ChildClass extends ParentClass {
  // 추가 속성 및 메서드
}
 

위 예시에서 ChildClass는 ParentClass를 상속받습니다.

즉, ChildClass는 ParentClass에서 정의된 모든 속성과 메서드를 물려받게 됩니다.

또한 ChildClass는 자체적으로 추가적인 속성과 메서드를 정의할 수 있습니다.

2. 오버라이딩(Overriding)

오버라이딩은 상속된 메서드를 자식 클래스에서 재정의하는 개념입니다.

오버라이딩을 통해 상속받은 메서드를 자식 클래스의 특성에 맞게 변경할 수 있습니다.

 

오버라이딩 구문

class ParentClass {
  void someMethod() {
    print("ParentClass의 someMethod()");
  }
}

class ChildClass extends ParentClass {
  @override
  void someMethod() {
    print("ChildClass의 someMethod()");
  }
}
 

위 예시에서 ChildClass는 ParentClass로부터 someMethod 메서드를 상속받습니다.

하지만 ChildClass는 someMethod 메서드를 자체적으로 재정의하여 ParentClass에서 정의된 메서드와 다른 동작을 수행합니다.

3. 인터페이스(Interface)

인터페이스는 클래스가 구현해야 하는 메서드를 정의하는 추상적인 설계도입니다.

인터페이스를 통해 클래스 간의 일관성을 유지하고 코드 결합도를 낮출 수 있습니다.

 

인터페이스 구문

abstract class SomeInterface {
  void someMethod();
}

class MyClass implements SomeInterface {
  @override
  void someMethod() {
    // 구현
  }
}
 

위 예시에서 SomeInterface는 someMethod이라는 메서드를 구현해야 하는 인터페이스를 정의합니다.

MyClass는 SomeInterface를 구현하기 때문에 someMethod 메서드를 반드시 구현해야 합니다.

4. 추상 클래스(Abstract Class)

추상 클래스는 추상 메서드를 포함하는 클래스입니다.

추상 클래스는 직접 인스턴스화할 수 없으며, 자식 클래스에서 추상 메서드를 구현해야 실제 객체로 생성될 수 있습니다.

추상 클래스를 통해 코드의 공통적인 구조를 정의하고, 자식 클래스에서 구체적인 구현을 담당하도록 분할할 수 있습니다.

 

추상 클래스 구문

abstract class AbstractClass {
  void someAbstractMethod();

  void someConcreteMethod() {
    // 구현
  }
}

class ChildClass extends AbstractClass {
  @override
  void someAbstractMethod() {
    // 구현
  }
}
 

위 예시에서 AbstractClass는 someAbstractMethod이라는 추상 메서드와 someConcreteMethod이라는 구체적인 메서드를 정의합니다.

ChildClass는 AbstractClass를 상속받고 someAbstractMethod을 구현해야 하지만, someConcreteMethod은 이미 AbstractClass에서 구현되어 있으므로 별도로 구현할 필요가 없습니다.

 

5. 결론

 

Dart에서 상속, 오버라이딩, 인터페이스, 추상 클래스는 코드를 효율적으로 구성하고 관리하며, 코드의 재사용성을 높이고 유지 관리를 용이하게 하는 데 중요한 역할을 합니다.

이러한 개념들을 올바르게 이해하고 활용함으로써 더욱 효율적이고 유연한 Dart 코드를 작성할 수 있습니다.

728x90
반응형