extends & mixin

하요·2024년 7월 2일
0
post-thumbnail

Dart에서 클래스 기능 확장하기: extends & mixin

Dart에서 extendsmixin 키워드는 클래스의 기능을 확장하고 코드 재사용성을 높이는 데 사용됩니다. extends는 클래스 상속을 통해 부모-자식 관계를 형성하고, mixin은 여러 클래스의 기능을 조합할 수 있게 해줍니다.

주요 개념

extends

  • 기능 상속: 특정 클래스의 기능을 상속받아 자식 클래스에서 사용할 수 있습니다.
  • 부모-자식 관계: 부모 클래스의 속성과 메서드를 자식 클래스에서 상속받아 사용합니다.

mixin

  • 기능 조합: 여러 클래스의 기능을 하나의 클래스에 조합하여 사용할 수 있습니다.
  • 다중 상속 회피: Dart는 다중 상속을 지원하지 않기 때문에, mixin을 사용하여 다중 상속의 유사한 기능을 구현합니다.

주요 사용 사례

extends

  • 기능 확장: 부모 클래스의 기능을 자식 클래스에서 확장할 때 사용합니다.
  • 기본 클래스 제공: 여러 자식 클래스에서 공통으로 사용할 기본 기능을 제공할 때 유용합니다.

mixin

  • 기능 혼합: 여러 클래스의 공통 기능을 하나의 클래스에 추가할 때 사용합니다.
  • 코드 재사용: 공통 기능을 여러 클래스에 재사용할 수 있습니다.

주요 활용도

extends

  • 부모 클래스의 기능 확장: 자식 클래스에서 부모 클래스의 속성과 메서드를 재사용하고 확장합니다.
  • 다형성 구현: 부모 클래스를 참조 타입으로 사용하여 다양한 자식 클래스를 동일하게 처리할 수 있습니다.

mixin

  • 여러 기능의 결합: 하나의 클래스에 여러 기능을 결합하여 사용합니다.
  • 유연한 코드 구성: 특정 기능을 여러 클래스에 추가하여 유연하게 코드를 구성할 수 있습니다.

코드 예제

extends 사용 예제

class Scanner {
  void scanning() => print("scanning...");
}

class Printer {
  void printing() => print("printing...");
}

class Machine extends Printer {}

void main() {
  final machine = Machine();
  machine.printing();
  // machine.scanning(); // 오류: Machine에는 scanning() 메서드가 없습니다.
}

다중 상속 불가 예제

class Scanner {
  void scanning() => print("scanning...");
}

class Printer extends Scanner {
  void printing() => print("printing...");
}

class Machine extends Printer {}

void main() {
  final machine = Machine();
  machine.printing();
  machine.scanning();
}

mixin 사용 예제

mixin class Scanner {
  void scanning() => print("scanning...");
}

mixin class Printer {
  void printing() => print("printing...");
}

class Machine with Printer, Scanner {}

void main() {
  final machine = Machine();
  machine.printing();
  machine.scanning();
}

추가 팁

  • 상속과 믹스인의 차이: 상속(extends)은 부모-자식 관계를 형성하고, 믹스인(mixin)은 여러 클래스의 기능을 결합합니다.
  • mixin 사용시 주의사항: 믹스인에 동일한 이름의 메서드나 속성이 존재하면, 더 뒤에 선언된 믹스인의 것이 사용됩니다.
  • Dart 버전에 따른 사용: Dart 3.0.0 이상에서는 mixin class를 사용하여 믹스인 클래스를 정의할 수 있습니다.

관련 자료

profile
flutter 개발자(진)

0개의 댓글