class Player {
String name = '성연'; //property String 선언
int age = 24; //property int 선언
}
void main() {
var player = Player(); //player 인스턴스를 생성하고 Player를 호
print(player.name);
print(player.age);
player.name = '김성연';
player.age = 25;
print(player.name);
print(player.age);
}
var player = Player('성연', 3);
→ Player(this.name, this.id);
‘성연’,’3’
을 class property에 할당한다.class Player {
int id;
String name;
Player(this.name, this.id); //this 사용, constructor
}
void main() {
var player = Player('성연', 3);
var player2 = Player('김성연', 10);
print(player2.id);
print(player.id);
}
클래스를 다음과 같은 방법으로 선언할 수 있다. 하지만 이 방법은 positional constructor parameter 방법이기 때문에 property들의 순서를 기억해야 한다는 단점이 있다. 그래서 보통 Named Constructor Parameters를 추천한다.
positional constructor parameter
class Player {
int boyage;
int girlage;
String boyname;
String girlname;
Player(this.boyname, this.girlname,this.boyage,this.girlage); //this 사용
}
void main() {
var player = Player('성연', 'girl',24,23);
}
class Player {
int boyage;
int girlage;
String boyname;
String girlname;
Player({
required this.boyname,
required this.girlname,
required this.boyage,
required this.girlage,
});
}
void main() {
var player = Player(
boyname: '성연',
girlname: 'girl',
boyage: 24,
girlage: 23,
);
}
Player.createBluePlayer
, Player.createRedPlayer
, Player
3개의 생성자를 만들면서 각 인스턴스에서 필요한 생성자를 골라서 쓸 수 있다.class Player {
final String name;
int xp, age;
String team;
Player({
required this.name,
required this.xp,
required this.age,
required this.team,
});
Player.createBluePlayer({
required String name,
required int age,
}) : age = age,
name = name,
team = 'blue',
xp = 0;
Player.createRedPlayer({
required String name,
required int age,
}) : age = age,
name = name,
team = 'Red',
xp = 0;
}
void main() {
var player = Player.createBluePlayer(name: '성연', age: 24);
var player2 = Player.createRedPlayer(name: 'Seong Yeon', age: 24);
}
..id = 4 ..id = 5 ..id = 6;
..을 앞에 붙여주고 세미콜론은 마지막 속성 뒤에만 붙인다class Player {
int id;
String name;
Player(this.name, this.id);
}
void main() {
var player2 = Player('김성연', 10);
var player = Player('성연', 3)
..id = 6
..name = 'ksy';
player2
..id = 55
..name = 'ksy';
print(player.id);
print(player2.id);
}
enum Team { blue, red }
Team이라는 enum을 만들고 blue와 red만 넣을 수 있게 했다enum Team { blue, red }
class Player {
int id;
String name;
Team team;
Player(this.name, this.id, this.team); // constructor with `this` keyword
}
void main() {
var player2 = Player('김성연', 10, Team.blue); //blue, red만 선택 가
var player = Player('성연', 3, Team.red);
}
자식 클래스가 부모 클래스를 상속 받아 property와 method를 사용하게 해준다
생성자는?? → 생성자는 가져오지 못하기 때문에 super라는 키워드를 이용해 명시적으로 부모 클래스의 생성자를 호출한다.
상속 받는 방법 class Player extends Human
예시 코드
class Human {
final String name;
Human({required this.name});
void sayHello() {
print('hi my name is $name');
}
}
enum Team { blue, red }
class Player extends Human {
//상속 받을 때 부모 클래스의 프로퍼티와 메서드는 가져오지만 생성자는 가져오지 않는다.
Player({required String name})
: super(name: name); //super를 이용해 명시적으로 부모 클래스의 생성자를 호출한다
}
void main() {
var player = Player(name: 'hello');
player.sayHello();
}
Override
자식 클래스가 부모 클래스에 있는 메서드, 프로퍼티를 가져와 재정의 하는 것이다.
예시 코드
class Parent {
void showMessage() {
print('This is a message from Parent class.');
}
}
class Child extends Parent {
void showMessage() {
super.showMessage();
print('This is a message from Child class.');
}
}
void main() {
var a = Child().showMessage();
}
Child 클래스가 Parent 클래스의 메서드를 재정의하는 코드이다 @override
super.showMessage();
로 부모 클래스의 메서드를 호출하는 것을 볼 수 있고 print('This is a message from Child class.');
를 추가 하면서 var a = Child().showMessage();
해당 결과값은 다음과 같다flutter: This is a message from Parent class. flutter: This is a message from Child class.
super에 name을 전달하면 이 클래스를 전달한 name(Human)과 함께 호출하게 된다
생성자가 없는 클래스
, 클래스에 프로퍼티들을 추가할 때 사용 한다mixin Walker {
void walk() {
print('Walking...');
}
}
mixin Swimmer {
void swim() {
print('Swimming...');
}
}
mixin Flyer {
void fly() {
print('Flying...');
}
}
class Human with Walker, Swimmer {}
class Bird with Walker, Flyer {
}
class Duck with Walker, Swimmer, Flyer {}
void main() {
var human = Human();
human.walk(); // Outputs: Walking...
human.swim(); // Outputs: Swimming...
var bird = Bird();
bird.walk(); // Outputs: Walking...
bird.fly(); // Outputs: Flying...
var duck = Duck();
duck.walk(); // Outputs: Walking...
duck.swim(); // Outputs: Swimming...
duck.fly(); // Outputs: Flying...
}