[Flutter] Dart - 4. Class
2024. 8. 25. 00:55ㆍStudy

Dart의 메인디쉬~ 집중해야댄다구~
1. Your First Dart Class
class Player {
String name = "miri"; // 만약 name의 값을 바꾸지 못하게 할거라면 final을 사용하면 됨
int age = 30;
void sayHello() {
// class method에서는 this.name과 같이 this를 사용하지 않는것을 권고
print("Hi, my name is $name");
// 단, method내에서 name이라는 variable이 있는데 Player class의 name을 불러오고 싶다면 this를 사용
// var name = "122";
// print("Hi, my name is $this.name");
}
}
void main() {
var player = Player();
print(player.name); // miri
player.sayHello(); // Hi, my name is miri
}
2. Constructors
- constructors method의 이름은 class 이름과 같아야 함
class Player {
late final String name; // name의 값을 바꾸지 못하게 하려면 final을 사용하면 됨
late int age;
Player(String name, int age) {
this.name = name;
this.age = age;
}
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var player = Player('miri', 30);
player.sayHello();
var player1 = Player('mirimi', 30);
player1.sayHello();
}
=
class Player {
final String name;
int age;
Player(this.name, this.age);
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var player = Player('miri', 30);
player.sayHello();
var player1 = Player('mirimi', 30);
player1.sayHello();
}
3. Named Constructor Parameters
class Player {
final String name;
int age;
String team;
int xp;
Player({
required this.name, // default value 보다는 required를 주는게 좋은것 같음(둘다 사용 가능)
required this.age,
required this.team,
required this.xp,
});
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var player = Player(
name: 'miri',
age: 30,
team: 'red',
xp: 1500,
);
player.sayHello();
var player1 = Player(
name: 'coco',
age: 14,
team: 'white',
xp: 2500,
);
player1.sayHello();
}
4. Named Constructors
- Flutter에서 constructor를 만들때 많이 사용하는 패턴
- : (콜론)을 사용하면 argument와 property를 일대일 초기화하는 생성자를 만들 수 있음
class Player {
final String name;
int age, xp;
String team;
Player({
required this.name,
required this.age,
required this.team,
required this.xp,
});
Player.createRedPlayer({
required String name,
required int age,
}) : this.name = name,
this.age = age,
this.team = 'red',
this.xp = 0;
Player.createBluePlayer(String name, int age)
: this.name = name,
this.age = age,
this.team = 'blue',
this.xp = 0;
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var redPlayer = Player.createRedPlayer(
name: 'miri',
age: 30,
);
var bluePlayer = Player.createBluePlayer('coco', 14);
}
- API 호출해서 Data 가져와서 사용한다고 가정 했을 때,
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");
}
}
void main() {
var apiData = [
{
'name': "miri",
"team": "red",
"xp": 0,
},
{
'name': "coco",
"team": "blue",
"xp": 0,
},
{
'name': "janggoon",
"team": "red",
"xp": 0,
},
];
apiData.forEach((playerJson) {
var player = Player.fromJson(playerJson);
player.sayHello();
});
}
5. Cascade Notation
- 앞에 class가 있다면 ..을 사용해서 property를 더 짧은 코드로 수정가능함
class Player {
String name;
int xp;
String team;
Player({
required this.name,
required this.xp,
required this.team,
});
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var miri = Player(name: 'miri', xp: 0, team: "red");
..name = 'mirin'
..xp = 1200
..team = 'blue'
..sayHello();
}
==
void main() {
var miri = Player(name: 'miri', xp: 0, team: "red");
miri.name = 'mirigu';
miri.xp = 1200;
miri.team = 'blue';
miri.sayHello();
}
6. Enums
- flutter에서 굉장히 자주 사용하게 될 것
- enum 타입은 실수를 하지 않게끔 도와줌(선택의 폭을 좁혀주는 역할을 함)
- enum 타입의 변수들은 해당 enum 타입에 생성된 값들 중에서만 값이 할당할 수 있음
enum Team { red, blue } // 텍스트 형태로 쓸 필요 없음
enum XPLevel { biginner, medium, pro }
class Player {
String name;
XPLevel xp;
Team team;
Player({
required this.name,
required this.xp,
required this.team,
});
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var miri = Player(name: 'miri', xp: XPLevel.biginner, team: Team.red)
..name = 'mirigu'
..xp = XPLevel.medium
..team = Team.blue
..sayHello();
}
7. Abstract Classes
- 추상화 클래스로는 객체를 생성할 수 없음
- 다른 클래스들이 직접 구현해야하는 메소드들을 모아놓은 청사진?
- 추상화 클래스는 특정 메소드를 구현하도록 강제함
// 추상화 클래스
// Human 클래스는 이를 상속받는 모든 클래스가 가지고 있어야 하는 메소드를 정의함
abstract class Human {
void walk(); // 메소드의 반환값만 설정
}
enum Team { red, blue } // 텍스트 형태로 쓸 필요 없음
enum XPLevel { biginner, medium, pro }
class Coach extends Human {
void walk() {
print("the coach is walking");
}
}
class Player extends Human {
String name;
XPLevel xp;
Team team;
Player({
required this.name,
required this.xp,
required this.team,
});
void walk() {
print("i'am walking");
}
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var miri = Player(name: 'miri', xp: XPLevel.biginner, team: Team.red)
..name = 'mirigu'
..xp = XPLevel.medium
..team = Team.blue
..sayHello();
}
8. Inheritance(상속)
- flutter에서는 가끔씩만 사용하지만, 꼭 알아둬야하는 중요한 개념
class Human {
final String name;
Human(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);
// super라는 키워드를 통해 (확장한) 부모 클래스와 상호작용할 수 있게 해줌
// super에 name을 전달하면 이 클래스를 전달한 name과 함께 호출됨
@override
void sayHello() {
super.sayHello(); // Human의 print("Hy my name is $name");을 불러옴
print("and I play for $team");
}
}
void main() {
var player = Player(team: Team.blue, name: 'miri');
player.sayHello(); // Human에 sayHello 메서드가 구현되어 있고, Player는 Human을 상속받음
}
9. Mixins
- flutter에서 꽤나 자주 사용함
- 생성자가 없는 클래스를 의미함
- 클래스에 프로퍼티를 추가할 때 사용함
- 다른 클래스에 여러번 재사용이 가능함
- extend는 확장한 그 클래스는 부모클래스가 되고, 자식클래스는 부모클래스를 super를 통해 접근할 수 있고,
- Mixin의 with는 내부의 프로퍼티와 메소드를 가져오는 역할
class Strong {
final double strengthLevel = 1500.99;
}
class QuickRunner {
void runQuick() {
print('ruuuuuuuuun!');
}
}
class Tall {
final double height = 1.99;
}
enum Team { red, blue }
class Player with Strong, QuickRunner, Tall {
// with를 사용해서 다른 클래스의 프로퍼티와 메소드를 긁어옴
final Team team;
Player({
required this.team,
});
}
class Horse with Strong, QuickRunner {}
class Kid with QuickRunner {}
void main() {
var player = Player(team: Team.blue);
player.runQuick();
}'Study' 카테고리의 다른 글
| Flutter에서 위젯(Widget)이란? (0) | 2024.08.29 |
|---|---|
| Flutter vs React Native, 어떤 걸 선택할까? 🤔 (0) | 2024.08.26 |
| [Flutter] Dart - 3. Function (0) | 2024.08.25 |
| [Flutter] Dart - 2. Data Type (0) | 2024.08.25 |
| [Flutter] Dart - 1. Variables (0) | 2024.08.25 |