๐Class
โญConstructor
void main() {
var player = Player('jui', 1000);
// Hi my name is jui
player.sayHello();
var player2 = Player('na', 2000);
// Hi my name is na
player2.sayHello();
}
class Player {
late final String name;
late int xp;
// ๊ธฐ๋ณธ ์์ฑ์
Player(String name, int xp) {
this.name = name;
this.xp = xp;
}
void sayHello() {
print("Hi my name is $name");
}
}
๊ธฐ๋ณธ ์์ฑ์๋ ํด๋์ค ์ด๋ฆ์ผ๋ก ์์ฑํ๋ค.
void main() {
var player = Player('jui', 1000);
// Hi my name is jui
player.sayHello();
var player2 = Player('na', 2000);
// Hi my name is na
player2.sayHello();
}
class Player {
final String name;
int xp;
// ๊ธฐ๋ณธ ์์ฑ์
Player(this.name, this.xp);
void sayHello() {
print("Hi my name is $name");
}
}
๊ฐ๊ฒฐํ๊ฒ ์ด๋ ๊ฒ ์์ฑํ ์๋ ์๋ค.
ํด๋์ค์ ๋ณ์์์ late ํค์๋๋ฅผ ์ง์ฐ๊ณ , ์์ฑ์๋ฅผ ๊ฐ๋จํ ํํํ๋ค.
โญNamed Constructor Parameter
void main() {
var player = Player(name: 'jui', xp: 1000, team: 'red', age: 10);
// Hi my name is jui
player.sayHello();
var player2 = Player(name: 'na', xp: 2000, team: 'blue', age: 12);
// Hi my name is na
player2.sayHello();
}
class Player {
final 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");
}
}
ํจ์์์ ๋ฐฐ์ ๋ Named Parameter์ ๋์ผํ ๊ธฐ๋ฅ์ด๋ค.
์์ฑ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค๊ดํธ๋ก ๊ฐ์ธ์ ์์ฑํ๊ณ , required ํค์๋๋ฅผ ๋ถ์ฌ์ค๋ค.
โญNamed Constructor
void main() {
var player = Player.createBluePlayer(name: 'jui', age: 10);
// Hi my name is jui
player.sayHello();
var player2 = Player.createRedPlayer('na', 12);
// Hi my name is na
player2.sayHello();
}
class Player {
final String name;
int xp, age;
String team;
// ๊ธฐ๋ณธ ์์ฑ์
// Named Constructor Parameter : ์ค๊ดํธ ์ถ๊ฐ
Player({
required this.name,
required this.xp,
required this.team,
required this.age,
});
// Named ์์ฑ์
// Named Constructor Parameter ์ฌ์ฉ O
Player.createBluePlayer({required String name, required int age})
: this.name = name,
this.age = age,
this.team = 'blue',
this.xp = 0;
// Named ์์ฑ์
// Named Constructor Parameter ์ฌ์ฉ X
Player.createRedPlayer(String name, int age)
: this.name = name,
this.age = age,
this.team = 'red',
this.xp = 0;
void sayHello() {
print("Hi my name is $name");
}
}
์ด๋ฆ ์๋ ์์ฑ์๋ ํด๋์ค๋ช .์ํ๋์์ฑ์์ด๋ฆ ํ์์ผ๋ก ์์ฑํ๋ค.
์ฝ๋ก [:] ์ ์ฌ์ฉํด์ ํด๋์ค๋ฅผ ์ด๊ธฐํํ ์ ์๋ค.
โญCascade Notation
void main() {
var player = Player.createBluePlayer(name: 'jui', age: 10)
..team = 'red'
..xp = 12000
..age = 13;
// ์์ ๊ฐ์ ์๋ฏธ
// player.team = 'red';
// player.xp = 12000;
// player.age = 13;
}
Syntax Sugar๋ ๋จ์ถ ๋ฌธ๋ฒ์ ์๋ฏธํ๋ค.
this๋ฅผ ์๋ตํ๊ฑฐ๋, ํจ์๋ฅผ ์์ฑํ ๋ return ๋์ => ๋ฅผ ์ฌ์ฉํ๋ ๋ฑ์ ๋จ์ถ ๋ฌธ๋ฒ์ด ์๋ค.
Cascade Operator๋ ๋จ์ถ๋ฌธ๋ฒ ์ค ํ๋์ด๋ค.
.. ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ๊ฐ์ฒด์ ๋ํด ์ ๊ทผํ ์ ์๋ค.
โญEnum
void main() {
var player = Player.createBluePlayer(name: 'jui', age: 10)
..team = Team.red
..xp = 12000
..age = 13;
}
enum Team { red, blue }
class Player {
final String name;
int xp, age;
Team team;
// ๊ธฐ๋ณธ ์์ฑ์
// Named Constructor Parameter : ์ค๊ดํธ ์ถ๊ฐ
Player({
required this.name,
required this.xp,
required this.team,
required this.age,
});
// Named ์์ฑ์
// Named Constructor Parameter ์ฌ์ฉ O
Player.createBluePlayer({required String name, required int age})
: this.name = name,
this.age = age,
this.team = Team.blue,
this.xp = 0;
// Named ์์ฑ์
// Named Constructor Parameter ์ฌ์ฉ X
Player.createRedPlayer(String name, int age)
: this.name = name,
this.age = age,
this.team = Team.red,
this.xp = 0;
void sayHello() {
print("Hi my name is $name");
}
}
enum์ ๊ฐ์ด ๋ฌธ์์ด์ด ์๋์ด๋ ๋๋ค.
โญAbstract Class
abstract class Human {
void walk();
}
class Teacher extends Human{
@override
void walk() {
// TODO: implement walk
}
}
์ถ์๋ฉ์๋๋ ์ง์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์๋ ์ค๊ณ์ฉ ํด๋์ค์ด๋ค.
์์์ ํตํด ์์ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํํด์ผํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ค.
extends ํค์๋๋ฅผ ์ฌ์ฉํด์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ๋๋ค.
๋ถ๋ชจ ํด๋์ค ๋ฉ์๋๋ฅผ ๊ตฌํํ ๋๋ @override ๋ฅผ ๋ถ์ฌ์ ์์ฑํ๋ค.
โญInheritance
void main() {
var player = Player(team: Team.blue, name: 'jui');
// Hi my name is jui
// and I play for Team.blue
player.sayHello();
}
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 play for $team');
}
}
super๋ ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ ํค์๋์ด๋ค.
โญMixins
void main() {
var player = Player(team: Team.red);
player.runQuick();
}
mixin Strong {
final double strenghtLevel = 1500.99;
}
mixin QuickRunner {
void runQuick() {
print('run!!');
}
}
enum Team { red, blue }
class Player with Strong, QuickRunner {
final Team team;
Player({required this.team});
}
์์์ด ์๋๋ผ ํ์ฅ์ ๊ฐ๋ ์ด๋ค.
with ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ฌ๋ฌ mixin class๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
mixin class๋ ์ธ์คํด์คํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์๋ค.