// // 넘버링된 제목들 사이를 주석 풀고 실행
// // 1. The Flower of Darts, Class
// class Player {
// // class 에서는 반드시 자료형을 명시
// String name = 'gino';
// int xp = 1500;
// Player(this.name, this.xp) {}
// }
// void main() {
// var player = Player('gino', 2500);
// print(player.name);
// }
// 2. Constructors
// class Player {
// // class 에선 값을 나중에 받아오는 late 활용도 높음
// late final String name;
// late int xp;
// Player(this.name, this.xp);
// void sayHello() {
// print('Hi my name is $name');
// }
// }
// void main() {
// var player = Player('gino', 2500);
// player.sayHello();
// var player2 = Player('ginoo', 5500);
// player2.sayHello();
// }
// 3. Named Constructor Parameters
// class Player {
// String name;
// int xp;
// String team;
// int age;
// // {} 감싸면 Named Constructor Parameter 설정 완료
// Player(
// {required this.name,
// required this.xp,
// required this.team,
// required this.age});
// void sayHello() {
// print('Hi my name is $name, $xp, $team, $age');
// }
// }
// void main() {
// // 압도적으로 named parameter 방식이 많음
// var player = Player(name: 'gino', xp: 2500, team: 'tree', age: 12);
// player.sayHello();
// // 비교
// // var player2 = Player('ginoo', 5500, 'blue', 22);
// // player2.sayHello();
// }
// 4. Named Constructors
// class Player {
// final String name;
// int xp, age; // 같은 modifier, type의 parameter는 같은 줄에 적을 수 있다
// String team;
// // {} 감싸면 Named Constructor Parameter
// Player(
// {required this.name,
// required this.xp,
// required this.team,
// required this.age});
// // 콜론(:)이 매우 중요
// // Dart 에게 Player 객체를 초기화하겠다고 선언하는 의미
// Player.createBluePlayer({required String name, required int age})
// // {} 활용한 named syntax
// : this.age = age,
// this.name = name,
// this.team = 'blue', // 팀의 기본값을 블루로 설정
// this.xp = 0;
// // {} 쓰지 않은 posional syntax
// Player.createRedPlayer(String name, int age)
// : this.age = age,
// this.name = name,
// this.team = 'red', // 팀의 기본값을 블루로 설정
// this.xp = 0;
// }
// void main() {
// // 압도적으로 named parameter 방식이 많음
// var player = Player.createBluePlayer(
// name: 'gino',
// age: 21,
// );
// var redPlayer = Player.createRedPlayer('ginoo', 23);
// print(player.team);
// print(redPlayer.team);
// }
// // 5. Named Constructors2
// // api로부터 데이터를 받는 상황을 가정
// class Player {
// final String name;
// int xp;
// String team;
// // fromJson이라는 named Constructors 생성
// Player.fromJson(Map<String, dynamic> playerJson)
// // JSON 내부를 하나하나 초기화
// : name = playerJson["name"],
// xp = playerJson["xp"],
// team = playerJson["team"];
// void sayHello() {
// print("Hi my name is $name");
// }
// }
// void main() {
// // 여러 player가 들어있는 api 데이터
// var apiData = [
// {
// "name": "gino",
// "team": "tree",
// "xp": 0,
// },
// {
// "name": "yena",
// "team": "red",
// "xp": 0,
// },
// {
// "name": "logan",
// "team": "blue",
// "xp": 0,
// },
// ];
// apiData.forEach((playerJson) {
// var player = Player.fromJson(playerJson);
// player.sayHello();
// });
// }