Dart-abstract method, Inheritance,Mixin

Mkim4·2023년 9월 3일
1

강의: #4.7 Abstract Classes
강의: #4.8 Inheritance
강의: #4.9 Mixins

abstract method(추상화 메소드)

추상화 클래스로는 객체를 생성할 수 없다. 추상화 클래스는 다른 클래스들이 직접 구현해야하는 메소드들을 모아놓은 일종의 청사진(blueprint)이라 보면된다.
추상화 클래스는 다른 클래스들이 어떤 청사진을 가지고 있어야 하는지 정의해주기 때문에 유용하다.

Human이라는 추상화 클래스는 walk라는 메소드를 가지고 이 메소드는 void를 반환해야 한다고 표시.
수많은 청사진에 메소드의 이름과 반환타입만 정해서 정의할 수 있다. 파라미터도 설정 가능하고 다른 클래스에서 extends(상속,확장)할 수 있다.
추상화 클래스는 특정 메소드를 구현하도록 강제한다.
Human 추상화 클래스는 이를 상속받는 모든 클래스가 가지고 있어야하는 메소드를 정의하고 있다.

abstract class Human {
  void walk();
}
enum Team { red, blue }

enum XPLevel { beginner, medium, pro }

//Human 클래스를 상속받는 Player 클래스를 만들었다.
class Player extends Human{
  String name;
  XPLevel xp;
  Team team;

  Player({
    required this.name,
    required this.xp,
    required this.team,
  });

  void walk(){
    print('im walking');
  }
  void  sayHello(){
    print("Hi my name is $name");
  }
}
class Coach extends Human{
  void walk(){
    print('the coach is walking');
  }
}
void main() {
  var nico = Player(name: "nico", xp: XPLevel.beginner , team: Team.red)
  ..name = 'las'
  ..xp = XPLevel.pro
  ..team = Team.blue;
}

Inheritance(상속)

상속을 하고 super를 이용해 부모 클래스의 생성자를 호출할 수 있다.
@override를 이용해 부모 클래스의 객체를 받아올 수 있다.

class Human {
  final String name;
  Human(this.name);
  void sayHello(){
    print("Hi my name is $name");
  }
}
enum Team {blue, red}

class Player extends Human{
  final Team team;
//Human 클래스의 생성자 함수의 호출,
//named argument를 사용하는 Player의 생성자 함수
  Player({
    required this.team,
    required String name
  }) : super(name);
  
  void sayHello(){
    super.sayHello();
    //확장(상속)한 부모 클래스의 프로퍼티에 접근하게 하거나 메소드를 호출할 수 있게 해줌
    //super라는 키워드를 통해 확장한 부모 클래스와 상호작용할 수 있게 해줌
    print('and I play for ${team}');
  }
}

void main() {
  var player = Player(team: Team.red,
      name: 'nico',
  );
  player.sayHello();

Mixin

Mixin은 생성자가 없는 클래스를 의미. 클래스에 프로퍼티들을 추가할 때 사용함.
Mixin 클래스들을 하나의 클래스에 단 한번만 사용할 것 같으면 의미가 없음.
Mixin의 핵심은 여러 클래스에 재사용이 가능하다는 점.
extend랑은 다름, extend를 하게 되면 확장한 그 클래스는 부모 클래스가 되는거고,
자식 클래스는 부모 클래스를 super를 통해서 접근할 수 있다. 그 순간 부모 클래스의 인스턴스가 된다.

Mixin은 with라는 키워드를 사용해서 단순히 Mixin내부의 프로퍼티와 메소드들을 가져오는 것 뿐이다. 한마디로 뺏어오는 것이라 보면된다. 단, Mixin의 조건은 생성자가 없는 클래스여야 한다.

profile
귀요미 개발자

1개의 댓글

comment-user-thumbnail
2023년 9월 3일

^오^

답글 달기

관련 채용 정보