본문 바로가기

Dart class - named constructor 본문

Dart

Dart class - named constructor

개발자로 거듭나기 2023. 4. 28. 17:32
반응형

06. dart class - named constructor

named consturctor

  • named constructor : 커스텀 생성자를 만든다. 본인의 입맛에 맞게 초기화 진행, : 이라는 신기한 문법사용.
  • : 뒤에 Player 클래스의 초기화를 진행한다.
class Player {
  final String name;
  // 타입이 같을경우 같이 선언 가능
  int xp, age;
  String team;

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

  Player.createBluePlayer({required String name, required int age})
      : this.age = age,
        this.name = name,
        this.team = "blue",
        this.xp = 0;

  Player.createRedPlayer(String name, int age)
      : this.age = age,
        this.name = name,
        this.team = "red",
        this.xp = 0;
}

void main() {
  // named parameter
  var bluePlayer = Player.createBluePlayer(name: "tom", age: 123);
  // positional parameter
  var redPlayer = Player.createRedPlayer("tom", 124);
}

다음과 같은 상황에 유용하다

  • api 데이터를 수신받았다고 가정하면,
  • Player class의 named constructor를 만들고, 받아온 api 데이터타입을 인자로 받습니다.
  • 그 후, : 문법을 이용해서 클래스의 초기화를 진행합니다.
class Player {
  final String name;
  int xp, age;
  String team;

  Player.fromJson(Map<String, dynamic> playerData)
      : this.name = playerData['name'],
        this.xp = playerData['xp'],
        this.age = playerData['age'],
        this.team = playerData['team'];

  void sayHello() {
    print("Hello, my name is $name, I'am $age, my team is $team, my xp is $xp");
  }
}

void main() {
  var apiData = [
    {
      "name": 'player01',
      "team": "red",
      "xp": 100,
      "age": 10,
    },
    {
      "name": 'player02',
      "team": "blue",
      "xp": 200,
      "age": 20,
    },
    {
      "name": 'player03',
      "team": "green",
      "xp": 300,
      "age": 30,
    },
  ];

  // 데이터를 순회하면서 sayHello 메서드를 수행합니다.
  apiData.forEach((playerData) {
    // named consturctor로 초기화
    var player = Player.fromJson(playerData);
    player.sayHello();
  });
  // Hello, my name is player01, I'am 10, my team is red, my xp is 100
  // Hello, my name is player02, I'am 20, my team is blue, my xp is 200
  // Hello, my name is player03, I'am 30, my team is green, my xp is 300
}
반응형

'Dart' 카테고리의 다른 글

Dart class - advanced  (0) 2023.04.28
Dart class - basic  (0) 2023.04.28
Dart 함수 (function) 알아보기  (0) 2023.04.28
Dart 자료형 (Data Type)  (0) 2023.04.28
Dart 변수 알아보기 ( variables )  (0) 2023.04.28
Comments