2023. 1. 14. 00:38ㆍflutter(플러터)
노마드코더님의 dart 무료강의를 공부해보자!
class Player {
String name = '만수';
int age = 50;
class를 생설할 때는 타입을 꼭 명시!
void 안녕() {
var name = ''봉식";
print("my name is ${this.name}")
method내에 name이라는 변수가 있으면 this 써준다.
아니면 다 $변수임!
}
}
void main() {
var player = Player();
player.name = '몽진';
name 바뀜!
player.안녕();
잘 작동함!
}
생성자(constructor) 함수 만들기!
class Player {
late final String name';
late int age;
late는 변수들의 값을 나중에 받아온다는 말임!!
Player(String name, int age){
this.name = name;
this.age = age;
}
void sayHello() {
print ("my name is $.name") ;
}
void main() {
var player1 = Player('만식', 30);
player1.sayHello();
var player2 = Player('방식', 43);
player2.sayHello();
}
But 이건 좀 반복적인 작업임!!!!!!!!!!!
타입을 아는데 밑에 또 타입을 적어주는 반복을 제거하자!
class Player {
final String name';
int age;
Player(this.name, this.age);
더 깔끔해짐!!
void sayHello() {
print ("my name is $.name") ;
}
Named Constructor Parameters
class Player {
final String name';
int age; -> int age weight; 이렇게 같은 int라면 한번에 선언할 수 있음!
String color;
int weight;
constructor(생성자)
Player({
required this.name,
required this.age,
required this.color,
required this.weight,
});
함수에서 했던 방식이랑 같음!!
void sayHello() {
print ("my name is $.name") ;
}
void main(){
var player = Player(
name: '만숙',
age: 20,
color: 'gray',
weight: 50
좋은 방식!!(이렇게 하면, 데이터가 많을 때도 argument의 위치를 기억하지 않아도 됨!)
);
var player2 = Player('수박', 32, '파랑', 16);
안 좋은 방식!
}
Named Constructors
createBluePlayer라는 새로운 메서드를 만듬
Player.createBluePlayer({
required String name,
required int age,
}) : this.age = age, // : 가 player 클래스를 초기화해줌!
this.name = name,
this.team = 'blue', //고정값
this.xp = 0; //고정값
void main(){
var player = Player.createBluePlayer(
name: '만숙',
age: 20,
);
void main(){
var player = Player.createRedPlayer(
name: '만숙',
age: 20,
);
Recap
api로 json format을 받으면 나는 이걸 class로 바꿔야한다.
payer 클래스의 생성과 초기화를 해줌!
class Player {
final String name';
int xp;
String team;
Player.fromJson(Map<String, danamic> playerJson) :
name = playerJson['name'],
xp= playerJson['xp'],
team = playerJson['team'];
void sayHello(){
print("HI my name is $name")
}
}
void main(){
var apiData = [
{
"name": "만수",
"team": "blue",
"xp": 0,
},
{
"name": "만수",
"team": "blue",
"xp": 0,
},
{
"name": "만수",
"team": "blue",
"xp": 0,
}
];
apiData.forEach((playerJson){
var player = Player.fromJson(playerJson);
player.sayHello();
});
}
Cascade Notation
void main(){
var 수박 = Player(name: '수박', xp: 20, team: red)
..name = '박수' // 수박.name ='박수'를 간소화 함!!
..xp = '12344'
..team = 'blue'
..sayHello(); 도 가능!
아주 좋은 operator!
}
Enums
enum Team { red, blue};
enum XPLevel {beginner, medium, pro}
class Player {
XPLevel xp;
실수를 줄여줌!
void main(){
var 'man' = Player(
xp: XPLevel.medium
team: Team.blue
)
Abstract Classes(그렇게 중요하지는 않음..)
abstract class Human {
void walk();
}
class Player extends Human{ //이렇게 하면 Human 클래스에 walk 메소드가 없다고 에러를 나타냄!
추상화 클래스는 특정 메소드를 구현하도록 강제함!
class Coach extends Human {
void walk() {
print('the coach is waling')
}
}
Inheritance
class Human {
final String name;
Human(requied this.name);
void sayHello(){
print("hi my name is $name")
}
}
enum Team {blue, red}
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}');
}
}
void main() {
var player = Player(team: Team.red);
}
Mixins
생성자가 없는 클래스를 말함!
calss Strong {
final double strenghtLevel = 134.34
Mixin의 조건은 생성자가 없는 클래스여야 함!
}
calss QuickRunner{
void runQuick() {
print("runnnnnn")
}
}
class Player with Strong, QuickRunner {
다른 클래스의 프로퍼티와 메소드를 그냥 가저오는 것!
}
void main() {
var player = Player(
team: Team.red,
);
player.runQuick();
}
extends랑 다름!
extend하면 확장한 클래스는 부모 클래스가 되고, 자식 클래스는 부모 클래스를 super를 통해서 접근 가능하며, 그 순간 부모 클래스의 인스턴스가 됨!
with은 단순히 내부의 프로퍼티와 메소드들을 가져오는 것임!
모두 열공!
끝!!
'flutter(플러터)' 카테고리의 다른 글
[IOS 시뮬레이터 안 켜지는 오류 해결] Could not build the application for the simulator. 해결하기 (0) | 2023.08.20 |
---|---|
[flutter 오류해결] Unable to find bundled Java version. 해결 (0) | 2023.01.28 |
[dart 언어] flutter를 위한 Dart공부 - FUNCTIONS (0) | 2023.01.14 |
[flutter_launcher_icons] 플러터 앱 아이콘 만들기 (0) | 2022.12.24 |
[Xcode 오류나서] Apple 프로젝트(Xcode)에 Firebase 다시 추가하기 (flutter create .을 누르고 깨끗한 파일들 받기) (0) | 2022.11.27 |