Language/Dart
Class
mansoorrr
2023. 12. 7. 22:57
- function에서 property를 정의할때는 var만 사용해도 무관
- class에서 property를 정의할때는 type을 명시하여 정의
# 예제 클래스 생성
class Player {
String name = "mansoor"; #property 초기화
int age = 20;
}
void main() {
var player = Player();
print(player.name);
print(player.age);
# property update
player.name = "roosnam";
print(player.name);
}
- class의 property를 변경하게 하지 못하게 하려면 final 추가
#final타입 추가
class Player {
final String name = "mansoor"; #final 추가
int age = 20;
}
void main() {
var player = Player();
print(player.name);
print(player.age);
#update 불가
#player.name = "roosnam";
#print(player.name);
}
- class내에 method 정의
- 아무것도 return하지 않을 것이기 때문에 void로 정의
- 클래스 내 property와 var(변수)가 이름이 겹치지 않는 이상 this.property라고 사용하지 않음
class Player {
String name = "mansoor";
int age = 20;
#${this.name}이 아니라 $name이라고 씀
void myInfo() {
print("My name is $name");
}
}
void main() {
var player = Player();
print(player.name);
print(player.age);
player.myInfo();
}
Constructor Method
- class에 parameter를 넘기는 방법
- parameter로 들어온 값으로 property의 값을 업데이트
- class의 이름과 같아야 함
- Constructor Method에 인자로 property를 넣어주고 method안에는 this.property = property 형식으로 입력
class Player {
late final String name;
late int age;
#class의 이름과 동일하게 Constructor Method작성
Player(String name, int age) {
this.name = name;
this.age = age;
}
void myInfo() {
print("my name is $name");
}
}
void main() {
var player1 = Player("mansoor", 20);
print(player1.name);
player1.myInfo();
var player2 = Player("sley", 18);
player2.myInfo();
var player3 = Player("arigato", 30);
print(player3.age);
player3.myInfo();
}
- 기본에서 조금 더 간결하게 쓰기 위한 방법이 있음
- Constructor Method의 인자로 들어가는 곳에 바로 this.property를 작성해줌
- class에서는 late타입을 지워줌
class Player {
# late타입 삭제
final String name;
int age;
# 인자로 바로 this.property 넘기기
Player(this.name, this.age);
void myInfo() {
print("my name is $name");
}
}
void main() {
var player1 = Player("mansoor", 20);
print(player1.name);
player1.myInfo();
var player2 = Player("sley", 18);
player2.myInfo();
var player3 = Player("arigato", 30);
print(player3.age);
player3.myInfo();
}
Named Constructor Parameter
- 일반 Constructor Method를 쓸 경우 position을 기억해야만 함
- 이것은 property의 위치를 기억해서 써야 하는 번거로움이 있음
- 그리고 property가 많아지면 기억하기가 어려움
- 따라서 property를 명시하고 쓰는 Named Constructor Parameter방식이 주로 사용됨
class Player {
final String name;
final int age;
final String country; #property 추가
# {}와 required를 이용해 named parameter 적용
Player({
required this.name,
required this.age,
required this.country,
});
void myInfo() {
print("my name is $name");
}
}
void main() {
# property들의 위치를 변경해서 써도 실행됨
var player1 = Player(
age: 20,
name: "mansoor",
country: "America"
);
print(player1.name);
player1.myInfo();
var player2 = Player(
country: "Africa",
name: "slie",
age: 44
);
player2.myInfo();
}
Named Constructor
- class에 속하지만 새로운 형식으로 class를 사용하고 싶을때 사용
- 원래 class의 property를 받지만 초기화된 property로 사용됨
class Player {
# 초기 property 설정
final String name, country; #이렇게도 쓸 수 있음
int age;
#constructor
Player({
required this.name,
required this.country,
required this.age,
});
#named constructor
Player.createAfrica({
required String name, #named constructor에서 사용할 property 넣어줌
required String country,
}) : this.name = name, #property 초기화
this.country = country,
this.age = 20; # 상위 클래스에서 사용한 property이므로 이와같이 초기화 가능
}
void main() {
var player1 = Player(
name: "mansoor",
age: 25,
country: "America"
);
print(player1.name);
# named constructor 사용
var player2 = Player.createAfrica(
name: "named mansoor",
country: "Africa",
);
print(player2.name);
print(player2.country);
print(player2.age);
}