Flutter/Dart

[Dart] 기본 - extends, with, implements

코르피 2023. 11. 29. 19:10
반응형

extends

상속이다.

부모가 가진 변수 및 메서드를 바로 사용할 수 있다.

with

클래스의 추가 기능을 구현할 때 쓴다.

class A with B {} 가 가능하다.

 

void main(List<String> args) {
  var dog = Dog();
  dog.bark(); // prints "talk"
}

class Dog extends Animal with barkable, talkable {}

class Animal {}

mixin barkable on Animal {
  bark() {
    print("bark");
  }
}

mixin talkable on Animal {
  bark() {
    print("talk");
  }
}

 

Animal에 bark() 메서드가 있다면 Animal에 있는 메서드를 실행하며,

mixin에 같은 메서드가 있다면 가장 마지막에 들어온 talkable에 있는 메서드를 실행한다.

implements

구현이다.

채택한 객체들이 가지고 있는 변수, 메소드를 모두 구현해야한다.

 

void main(List<String> args) {
  var platypus = Platypus();
  platypus.bark(); // prints "quack"
}

// 오리너구리
class Platypus extends Duck implements Raccon {}

class Animal {}

class Duck extends Animal {
  bark() {
    print("quack");
  }
}

class Raccon extends Animal {
  bark() {
    print("talk");
  }
}

 

Raccoon에 있는 bark를 구현해주어야 하지만 부모인 Duck에 존재하므로

Duck의 메서드를 실행한다.

 

 

번외 

이것 저것 다 섞으면 이런 것도 가능하다.

void main(List<String> args) {
  var a = A();
  a.talk(); // prints "talk"
}

class A extends B with b1, b2 implements D {}

mixin b1 on B {}
mixin b2 on B {
  void talk() {
    print("talk");
  }
}

class B {}

mixin c1 on C {}
mixin c2 on C {}

class C {}

class D extends C with c1, c2 {}

 

 

다중상속이 가능하게 한 것은 좋은데 왜 중복 메소드를 처리하지 않았을까?

컴파일러에서 메서드가 중복된다고 에러를 띄워주어 막으면 되지 않았을까?

 

결론: Dart는 다중상속으로 인한 중복 메서드 실행으로 원치 않는 코드가 실행되는 버그를 초래할 수 있다.

반쪽짜리 기능인 느낌이다.

반응형

'Flutter > Dart' 카테고리의 다른 글

[Dart] 기본 - Final, Const  (1) 2023.12.01
[Dart] 기본 - Record  (1) 2023.11.30
[Dart] 기본 - Classes, Abstract, Mixin  (0) 2023.11.29
[Dart] 기본 - Loops  (0) 2023.11.29
[Dart] 기본 - Type  (1) 2023.11.29