1. 강의 페이지

 

https://nomadcoders.co/dart-for-beginners

 

Dart 시작하기 – 노마드 코더 Nomad Coders

Flutter 앱 개발을 위한 Dart 배우기

nomadcoders.co

 

 

 

 

 

2. Dart 연습실 in web

 

Dart를 설치하지 않고 실행 결과를 확인할 수 있는 서비스

 

Command + Enter를 통해 Run 가능

 

https://dartpad.dev/

 

DartPad

 

dartpad.dev

 

 

 

 

 

3. class 기본 예제

 

class Player {
  String name = "Harry";
  int xp = 1500;
}

void main() {
  var user = Player();
  print(user.name);
  user.name = "Max";
  print(user.name);
}

 

 

 

 

 

4. class 내에 함수 활용 기본 예제

 

class Player {
  String name = "Harry";
  int xp = 1500;
  
  void sayHello() {
    print("Hi, I'm $name");
  }
}

void main() {
  var user = Player();
  print(user.name);
  
  user.name = "Max";
  print(user.name);
  
  user.sayHello();
}

 

 

 

 

 

5. class안의 함수에서 동일 이름 변수 활용 예제

 

 - 함수 안에서의 name은 private하여 class의 name을 수정하지는 않습니다.

 

class Player {
  String name = "Harry";
  int xp = 1500;
  
  void sayHello() {
    var name = "Jay";
    print("Hi, I'm $name");
  }
}

void main() {
  var user = Player();
  print(user.name);
  
  user.sayHello();
  
  print(user.name);
}

 2개의 다른 name을 함수 내에서 사용한다면 아래와 같이 활용합니다.

 하지만 class method 내에서 this를 사용하는 것은 권장되지 않기 때문에, 가능하다면 동일한 변수명을 사용하지 않는 것이 좋습니다.

class Player {
  String name = "Harry";
  int xp = 1500;
  
  void sayHello() {
    var name = "Jay";
    print("Hi, I'm ${this.name}");
    print("Hi, You're $name");
  }
}

void main() {
  var user = Player();
  print(user.name);
  
  user.sayHello();
  
  print(user.name);
}

 

 

 

 

 

6. class의 특정 변수 value를 바꿀 수 없게 하려면, final을 사용

 

class Player {
  // name을 변경할 수 없도록 final 지정
  final String name = "Harry";
  int xp = 1500;
  
  void sayHello() {
    print("Hi, You're $name");
  }
}

void main() {
  var user = Player();
  user.sayHello();
}

 

 

 

 

 

7. Constructors를 활용한 class 기본 예제

 

 - positional arguments 사용 예시

 

class Player {
  final String name;
  int xp;
  
  Player(this.name, this.xp);
  
  void sayHello() {
    print("Hi, You're $name");
  }
}

void main() {
  var user1 = Player("Jay", 2000);
  user1.sayHello();
  var user2 = Player("Harry", 990);
  user2.sayHello();
}

 

 - Named Constructor Parameters 사용 예시

 

class Player {
  final String name;
  int xp;
  String team;
  int age;
  
  Player({
    required this.name, 
    required this.xp, 
    required this.team, 
    required this.age
    });
  
  void sayHello() {
    print("Hi, You're $name");
  }
}

void main() {
  var user1 = Player(
    name: "Jay", 
    xp: 2000, 
    team: "blue",
    age: 19
  );
  user1.sayHello();
  var user2 = Player(
    name: "Harry", 
    xp: 990,
    team: "red",
    age: 25
  );
  user2.sayHello();
}

 

 

 

 

 

8.  : (콜론)을 활용한 객체 초기화 예제

 

class Player {
  final String name;
  int xp, age;
  String team;
  
  Player({
    required this.name, 
    required this.xp, 
    required this.team, 
    required this.age
    });
  
  Player.createBlueTeamMember({
    required String name,
    required int age
  }) : this.age = age,
  this.name = name,
  this.team = "blue",
  this.xp = 0;
  
  void sayInfo() {
    print("Hi, You're $name in $team team. $age years old.");
  }
}

void main() {
  var user1 = Player.createBlueTeamMember(
    name: "Jay", 
    age: 19
  );
  user1.sayInfo();
}

 

아래는 응용 버전의 코드입니다.

 - blue team member 만들기에서는 Named Constructor Parameters 사용

 - red team member 만들기에서는 positional arguments 사용

class Player {
  final String name;
  int xp, age;
  String team;
  
  Player({
    required this.name, 
    required this.xp, 
    required this.team, 
    required this.age
    });
  
  Player.createBlueTeamMember({
    required String name,
    required int age
  }) : this.age = age,
  this.name = name,
  this.team = "blue",
  this.xp = 0;
  
  Player.createRedTeamMember(
    String name, int age
  ) : this.name = name,
  this.age = age,
  this.team = "red",
  this.xp = 0;
  
  void sayInfo() {
    print("Hi, You're $name in $team team. $age years old.");
  }
}

void main() {
  var user1 = Player.createBlueTeamMember(
    name: "Jay", 
    age: 19
  );
  user1.sayInfo();
  
  var user2 = Player.createRedTeamMember(
    "Harry", 25
  );
  user2.sayInfo();
}

 

 

 

 

 

9. json 데이터를 객체화하여 사용하는 기본 예제

 

class Player {
  final String name;
  int xp;
  String team;
  
  Player.fromJson(Map<String, dynamic> playerJson)
    : name = playerJson["name"],
  xp = playerJson["xp"],
  team = playerJson["team"];
  
  void sayHello() {
    print("Hi, my name is $name in $team team. My xp is $xp.");
  }
  
}

void main() {
  var apiData = [
    {
      "name": "Harry",
      "team": "red",
      "xp": 0
    }, 
    {
      "name": "Jay",
      "team": "blue",
      "xp": 0
    }, 
    {
      "name": "Max",
      "team": "red",
      "xp": 0
    }
  ];
  
  apiData.forEach((playerJson) {
    var user = Player.fromJson(playerJson);
    user.sayHello();
  });
}

 

 

 

 

 

10. Cascade Notation (Cascade Operator) 사용 예제

 

 - Cascade Notation(Cascade Operator)을 사용하지 않을 경우 아래와 같습니다.

class Player {
  String name, team;
  int xp;
  
  Player(
    {
      required this.name, 
      required this.xp,
      required this.team
    }
  );
  
  void sayHello() {
    print("Hi, my name is $name in $team team. My xp is $xp.");
  }
  
}

void main() {
  var user1 = Player(name: "Harry", xp: 1200, team: "red");
  user1.name = "Jay";
  user1.xp = 9900;
  user1.team = "blue";
  user1.sayHello();
}

 

 - Cascade Notation(Cascade Operator)을 사용할 경우 아래와 같습니다.

class Player {
  String name, team;
  int xp;
  
  Player(
    {
      required this.name, 
      required this.xp,
      required this.team
    }
  );
  
  void sayHello() {
    print("Hi, my name is $name in $team team. My xp is $xp.");
  }
  
}

void main() {
  var user1 = Player(name: "Harry", xp: 1200, team: "red");
  var tryReset = user1
    ..name = "Jay"
    ..xp = 9900
    ..team = "blue"
    ..sayHello();
}

 

 

 

 

 

11. enum 사용 예제

 

enum Team { red, blue }
enum XPLevel { beginner, medium, pro }

class Player {
  String name;
  Team team;
  XPLevel xp;
  
  Player(
    {
      required this.name, 
      required this.xp,
      required this.team
    }
  );
  
  void sayHello() {
    print("Hi, my name is $name in $team team. My xp is $xp.");
  }
  
}

void main() {
  var user1 = Player(
    name: "Harry", 
    xp: XPLevel.beginner, 
    team: Team.red
  );
  var tryReset = user1
    ..name = "Jay"
    ..xp = XPLevel.pro
    ..team = Team.blue
    ..sayHello();
}

 

 

 

 

 

12. abstract class를 활용한 extends 기본 예제

 

abstract class Human {
  void walk();
}

enum Team { red, blue }
enum XPLevel { beginner, medium, pro }

class Player extends Human {
  String name;
  Team team;
  XPLevel xp;
  
  Player(
    {
      required this.name, 
      required this.xp,
      required this.team
    }
  );
  
  void walk() {
    print("I'm walking.");
  }
  
  void sayHello() {
    print("Hi, my name is $name in $team team. My xp is $xp.");
  }
  
}

class Coach extends Human {
  void walk() {
    print("He is walking...");
  }
}

void main() {
  var user1 = Player(
    name: "Harry", 
    xp: XPLevel.beginner, 
    team: Team.red
  )
    ..sayHello();
  
  var tryReset = user1
    ..name = "Jay"
    ..xp = XPLevel.pro
    ..team = Team.blue
    ..sayHello()
    ..walk();
  
  var teacher = Coach()
    ..walk();
  
}

 

 

 

 

 

13. super를 활용한 기본 예제

 

class Human {
  final String name;
  Human(this.name);
  void sayHelli() {
    print("Hi I'm $name");
  }
}

enum Team { red, blue }

class Player extends Human {
  final Team team;
  
  Player({
    required this.team,
    required String name
  }) : super(name);
}

void main() {
  var user = Player(team: Team.red, name: "Harry");
  user.sayHelli();
}

 

 - 깨알 복습 : named argument를 사용하는 방식으로 코드 변경하기

class Human {
  final String name;
  Human({required this.name});
  void sayHello() {
    print("Hi I'm $name");
  }
}

enum Team { red, blue }

class Player extends Human {
  final Team team;
  
  Player({
    required this.team,
    required String name
  }) : super(name: name);
}

void main() {
  var user = Player(team: Team.red, name: "Harry");
  user.sayHello();
  print(user.team);
  print(user.name);
}

 

 

 

 

 

14. override를 활용한 기본 예제

 

@override로 Human의 sayHello를 덮어씁니다.

 

class Human {
  final String name;
  Human({required this.name});
  void sayHello() {
    print("Hi I'm $name");
  }
}

enum Team { red, blue }

class Player extends Human {
  final Team team;
  
  Player({
    required this.team,
    required String name
  }) : super(name: name);
  
  @override
  void sayHello() {
    super.sayHello();
    print("And I play for team $team");
  }
}

void main() {
  var user = Player(team: Team.red, name: "Harry");
  user.sayHello();
  print(user.team);
  print(user.name);
}

 

 

 

 

15. Mixins를 사용한 기본 예제

 

Mixins는 생성자가 없는 클래스를 의미합니다.

일단, 아래는 Mixins를 사용하기 전 기본 코드입니다.

 

enum Team { red, blue }

class Player {
  final Team team;
  
  Player({
    required this.team
  });
}

void main() {
  
}

 

Mixins를 사용해 코드를 작성합니다.

enum Team { red, blue }


class Strong {
  double strengthLevel = 95.3;
}

class QuickRunner {
  void hurryUp() {
    print("Ruuuuuun!");
  }
}

class Tall {
  final double height = 183.9;
}


class Player with Strong, QuickRunner, Tall {
  final Team team;
  
  Player({
    required this.team
  });
}

class Horse with Strong, QuickRunner {}

class Kid with QuickRunner {}

void main() {
  var user = Player(team: Team.red);
  user.hurryUp();
  var myPet = Horse();
  print(myPet.strengthLevel);
}

 

 

 

 

+ Recent posts