Cascade Notation
- 앞에 class가 있다면 .. 을 사용해서 property를 더 짧은 코드로 수정할 수 있다.
class Players {
String name, team;
int xp;
Players(
{required this.name,
required this.xp,
required this.team,
});
void sayHello() {
print("Hi my name is $name");
}
}
void main () {
var player = Players(name: "minsu", xp: 2500, team: 'red');
player.name = 'las';
player.xp = 120000;
player.team = 'blue';
==
**var player = Players(name: "minsu", xp: 2500, team: 'red')
..name = 'las'
..xp = 120000
..team = 'blue'
..sayHello();**
}
Enums
- 개발자들이 실수하지 않게끔 도와준다 (선택의 폭을 좁혀주는 역할을 함)
- enum type의 변수들은 해당 enum type에 생성된 값들 중에서만 값이 할당될 수 있다.
enum Team { red, blue }
enum XPLevel { low, middle, high }
class Players {
String name;
XPLevel xp;
Team team;
Players(
{required this.name,
required this.xp,
required this.team,
});
void sayHello() {
print("Hi my name is $name. xp = $xp. team = $team");
}
}
void main () {
var player = Players(name: "minsu", xp: XPLevel.low, team: Team.red)
..name = 'las'
..xp = XPLevel.high
..team = Team.blue
..sayHello();
}
Abstarct Classes
- 다른 클래스들이 직접 구현해야하는 메소들을 모아놓은 일종의 청사진이다.
- 다른 클래스들이 어떤 청사진을 가지고 있어야 하는지 정의해주기 때문에 유용하다.
- 특정 메소드를 구현하도록 강제한다.
abstract class Person {
void walk();
}
class Player extends Person {
String name;
int xp;
String team;
Player({required this.name, required this.xp, required this.team});
void walk() {
print("Player is walking");
}
void sayHello() {
print("Hi my name is $name");
}
}
class Coach extends Person {
void walk() {
print("Coach is walking");
}
}
void main() {
var player = Player(name: 'coma', xp: 1700, team: 'blue');
var coach = Coach();
player.walk();
coach.walk();
}
Inheritance
- super 라는 키워드를 통해 (확장한)부모 클래스와 상호작용할 수 있게 해준다.
class Human{
final String name;
Human({required this.name});
void sayHello(){
print("Hi my name is $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 paly for ${team}');
}
}
void main(){
var player = Player(team: Team.red, name:'note',);
player.sayHello();
}
Mixins
- 조건 : 생성자가 없는 클래스, mixin으로 생성
- with를 사용해서 다른 클래스의 프로퍼티와 메소드를 긁어온다
- 다른 클래스에 여러번 재사용이 가능하다
- extend는 확장한 그 클래스는 부모 클래스가 되고, 자식 클래스는 부모 클래스를 super를 통해 접근할 수 있고,
- Mixin의 with는 내부의 프로퍼티와 메소드를 가져오는 역할이다. (부모클래스가 되진 않는다)