본문 바로가기
Flutter/Dart Language

Dart에서 클래스 상속 심화 학습: 상속의 모든 것을 다루는 가이드

by Maccrey 2024. 6. 23.
반응형

 
Dart에서 상속은 객체 지향 프로그래밍의 핵심 개념으로, 코드 재사용성을 높이고 코드 구조를 효율적으로 구성하는 데 매우 유용한 도구입니다.
이 블로그 게시글에서는 Dart에서 상속의 심층적인 개념과 다양한 활용 사례를 탐구하며, 상속을 활용한 실제 코드 예시를 통해 이해를 돕겠습니다.

1. 상속의 기본 개념 복습

이미 이전 블로그 게시글에서 상속의 기본 개념을 살펴보았지만, 심층 학습을 위해 다시 한 번 간략하게 정리해보겠습니다.

상속은 한 클래스 (부모 클래스)가 다른 클래스 (자식 클래스) 에 자신의 속성과 기능들을 물려주는 개념입니다.

즉, 자식 클래스는 부모 클래스에서 정의된 모든 속성과 기능을 자동으로 물려받게 됩니다.

이를 통해 코드 중복을 줄이고, 코드 유지 관리를 용이하게 하며, 코드의 계층 구조를 명확하게 만들 수 있습니다.

 

상속 구문

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

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

2. 다양한 상속 유형

Dart에서 상속에는 다음과 같은 다양한 유형이 있습니다.

  • 단일 상속: 한 클래스가 하나의 부모 클래스만 상속받을 수 있습니다. Dart는 기본적으로 단일 상속을 지원합니다.
  • 다중 상속: 한 클래스가 여러 개의 부모 클래스를 상속받을 수 있습니다. Dart는 기본적으로 다중 상속을 지원하지 않지만, mixin을 사용하여 다중 상속과 유사한 기능을 구현할 수 있습니다.
  • 계층 상속: 부모 클래스가 다른 부모 클래스를 상속받는 방식으로 여러 클래스 간의 계층 구조를 만들 수 있습니다.

3. 상속 활용 사례

상속은 다음과 같은 다양한 상황에서 활용될 수 있습니다.

  • 동물 계층 구조: Animal 클래스를 기반으로 Dog, Cat, Bird 등 다양한 동물 클래스를 만들 수 있습니다.
  • UI 위젯 계층 구조: Widget 클래스를 기반으로 Button, TextField, Image 등 다양한 UI 위젯 클래스를 만들 수 있습니다.
  • 네트워크 통신 계층 구조: NetworkRequest 클래스를 기반으로 GETRequest, POSTRequest, PUTRequest 등 다양한 네트워크 요청 클래스를 만들 수 있습니다.
  • 에러 처리 계층 구조: Exception 클래스를 기반으로 FormatException, IOException, SocketException 등 다양한 에러 클래스를 만들 수 있습니다.

4. 상속 관련 주요 개념

  • 오버라이딩: 자식 클래스에서 부모 클래스의 메서드를 재정의하여 자체적인 기능을 구현하는 개념입니다.
  • 슈퍼클래스: 현재 클래스의 직접적인 부모 클래스를 의미합니다.
  • 서브클래스: 현재 클래스의 하위 클래스를 의미합니다.
  • 추상 클래스: 추상 메서드를 포함하는 클래스입니다. 추상 클래스는 직접 인스턴스화할 수 없으며, 자식 클래스에서 추상 메서드를 구현해야 실제 객체로 생성될 수 있습니다.
  • 인터페이스: 클래스가 구현해야 하는 메서드를 정의하는 추상적인 설계도입니다. 인터페이스를 통해 클래스 간의 일관성을 유지하고 코드 결합도를 낮출 수 있습니다.

5. 실제 코드 예시

다음은 상속을 활용한 실제 코드 예시입니다.

 

예시 1 : 사각형 계층 구조 

 
abstract class Shape {
  double calculateArea();
}

class Rectangle extends Shape {
  double width;
  double height;

  Rectangle(this.width, this.height);

  @override
  double calculateArea() {
    return width * height;
  }
}

class Square extends Rectangle {
  Square(double side) : super(side, side);

  @override
  double calculateArea() {
    return side * side;
  }
}

void main() {
  Rectangle rectangle = Rectangle(5.0, 3.0);
  print("Rectangle area: ${rectangle.calculateArea()}"); // 15.0

  Square square = Square(4.0);
  print("Square area: ${square.calculateArea()}"); // 16.0
}
 

설명

  • Shape 클래스는 추상 클래스로 정의되어 calculateArea라는 추상 메서드를 가지고 있습니다.
  • Rectangle 클래스는 Shape 클래스를 상속받고, widthheight 속성을 추가합니다. 또한, calculateArea 메서드를 재정의하여 사각형의 넓이를 계산합니다.
  • Square 클래스는 Rectangle 클래스를 상속받고, side라는 속성을 사용하여 정사각형을 나타냅니다. 또한, calculateArea 메서드를 재정의하여 정사각형의 넓이를 계산합니다.
  • main 함수에서는 Rectangle 객체와 Square 객체를 만들고, 각 객체의 calculateArea 메서드를 호출하여 넓이를 계산합니다.

예시 2: 추상 클래스와 인터페이스 활용

abstract class Animal {
  String name;
  int age;

  void eat();
}

interface Carnivore {
  void eatMeat();
}

class Lion extends Animal implements Carnivore {
  @override
  String name = "Lion";

  @override
  int age = 5;

  @override
  void eat() {
    print("$name is eating.");
  }

  @override
  void eatMeat() {
    print("$name is eating meat.");
  }
}

void main() {
  Lion lion = Lion();
  lion.eat(); // Lion is eating.
  lion.eatMeat(); // Lion is eating meat.
}
 

설명

  • Animal 클래스는 추상 클래스로 정의되어 name, age, eat 메서드를 가지고 있습니다.
  • Carnivore 인터페이스는 eatMeat 메서드를 정의합니다.
  • Lion 클래스는 Animal 클래스를 상속받고, Carnivore 인터페이스를 구현합니다. 또한, nameage 속성을 초기화하고, eat 메서드와 eatMeat 메서드를 구현합니다.
  • main 함수에서는 Lion 객체를 만들고, eat 메서드와 eatMeat 메서드를 호출합니다.

6. 상속 활용 시 주의 사항

  • 상속은 클래스 간의 is-a 관계를 나타냅니다. Dog is-a Animal 처럼, 자식 클래스는 항상 상속받은 클래스의 모든 특성과 기능을 포함해야 합니다.
  • 상속은 클래스 간의 결합도를 높일 수 있습니다. 따라서 상속을 사용할 때는 신중하게 판단해야 합니다.
  • 다중 상속은 Dart에서 기본적으로 지원되지 않습니다. 하지만 mixin을 사용하여 다중 상속과 유사한 기능을 구현할 수 있습니다.
  • 추상 클래스와 인터페이스를 활용하여 코드의 계층 구조를 더욱 효과적으로 설계할 수 있습니다.

7. 마무리

 이 블로그 게시글에서는 Dart에서 상속의 심층적인 개념과 다양한 활용 사례를 탐구하며, 실제 코드 예시를 통해 이해를 돕고자 했습니다. 상속을 활용하여 코드를 재사용하고 효율적으로 구성함으로써 더욱 훌륭한 Dart 프로그래머가 되어나가시길 바랍니다.

더 궁금한 점이나 개선할 부분이 있다면 언제든지 코멘트를 남겨주세요.

 

 

수발가족을 위한 일기장 “나비일기장”

 

https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release

 

구글플레이 앱 배포의 시작! 비공개테스트 20명의 테스터모집을 위한 앱 "테스터 쉐어"

 

https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

카카오톡 오픈 채팅방

https://open.kakao.com/o/gsS8Jbzg

반응형