1. Class
가장 중요한 class에 대해서 알아보자.
다른 언어와의 차이점에 대해서도 잘 알아보아야 한다.
예로 Player라는 클래스를 작성해본다.
class Player {
String name = 'taek';
int xp = 1500;
void sayHello() {
print("Hi my name is $name");
}
}
void main() {
// var player = new Player(); // new를 써도 되고 안써도된다.
var player = Player();
print(player.name);
player.name = 'lalala';
print(player.name);
}
class에서 property를 선언할때는 타입을 사용해서 정의한다.
이전 포스팅에서 말했듯이 function 내에서 variable를 사용할 때는 var를 사용하면 된다. 하지만 Class를 생성할 때는 타입을 꼭 명시해주어야 한다.
클래스 사용방법은 다른 언어와 문법이 비슷하다.
이제 variable의 modifier에 대해서 배운걸 토대로 class에 적용해보자.
예를 들어, Player의 name을 바꾸지 못하게 하고 싶으면?
이렇게 final을 쓰면 된다. 그럼 바로 아래에 오류가 뜨는걸 확인할 수 있다.
추가로 인사하는 메서드 sayHello()를 만들었는데 안에 $name을 살펴보자.
보통 다른 객체 프로그래밍 언어는 this.name 이런식으로 작성하는데, Dart는 Class method 내에서의 this를 사용하지 않는 것이 권고되고 있다. 물론, this.name으로 해도 동작한다.
물론 메서드 내에 같은 이름의 variable이 있으면 this를 사용해야한다.
하지만, 이렇게 variable과 class property의 이름이 겹치는게 아니라면 this를 쓸 필요가 없다.
마지막으로 사용 예시 소스코드이다.
2. Constructors
위처럼 만들면 Player를 여러개 생성했을 때 모두 같은 이름과 xp가 생성이 된다.
그래서 player를 생성할 때, 인자값을 받아서 생성해주는 Constructor method(생성자 함수)를 만들어주자.
하지만, 이렇게 name에는 에러가 뜬다. why?
final variable이기 때문에, 값이 무조건 필요하다. 그러나 이 때 사용할 수 있는게 바로 앞에서 배운 late이다.
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("taek", 1500);
player.sayHello();
var player2 = Player("lynn", 2500);
player2.sayHello();
}
이게 바로 late의 장점이다.
이제 코드를 줄여보자.
생성자를 만들면서 variable의 타입을 선언하고, 또 거기에 값을 넣는 조금은 반복적인 작업이다.
따라서 다음과 같이 late를 지워주고, 생성자를 바꿔주면 된다.
이렇게 해도 정상적으로 동작하는 것을 확인할 수 있다.
'앱 개발 > Dart' 카테고리의 다른 글
Dart Classes(클래스) - Cascade Operator, Enum, Abstract Class, Inheritance, Mixin (0) | 2024.05.16 |
---|---|
Dart Classes(클래스) - Named Constructor Parameters, Named Constructors (0) | 2024.05.16 |
Dart Functions(함수) - Optional Positional Parameters, QQ Operator, Typedef (0) | 2024.05.09 |
Dart Functions(함수) - Defining a Function, Named Parameters (0) | 2024.05.08 |
Dart Data Types(데이터 타입) (0) | 2024.05.08 |