Dart class - advanced 본문
반응형
07. dart class - advanced
1. enum & casacde notation
- 클래스의 멤버변수를 선언하고 초기화 하고 인스턴스 변수를 만들때 값을 한정지어서 개발할 때의 실수를 방지할 수 있습니다.
- 다음과 같이 선언합니다.
enum Team { red, blue }
class Player {
String name;
int xp;
Team team; // 자료형 선언 후
Player({required this.name, required this.xp, required this.team});
void sayHello() {
// 값을 찍을 때는 Team.name으로 값 확인
print("Hi my name is $name and my team is ${team.name}");
}
}
void main() {
// cascade notation
// tom을 생성하고 player 정보를 변경할 때, tom.name = "alice" 이렇게 바꾸지 않고 ..name = "alice"이런식으로 바꿀 수 있다.
// 바로 앞에 class가 있다면 그것을 가리키게 된다.
var tom = Player(name: "tom", xp: 100, team: Team.red) // 사용시에는 Team.*로 사용
..name = "alice"
..xp = 200
..team = Team.blue
..sayHello();
}
- Team이라는 enum을 만들었으면 마치 자료형 (String, int)과 같이 변수를 선언해줍니다.
- 이제 사용할 때는 Team.* 로사용하고 enum 선언시 정의했던 값말고는 사용할 수 없습니다.
- cascade notation은 마치 메서드 체이닝처럼 앞에 클래스가 있으면 ..[변수] = [값] 형태로 계속 연결하면서 초기화해줄 수 있습니다.
tom.name = "mike";
tom.xp = 1212;
tom.team = "brwon";
- 이렇게 선언하는 것 보다는 코드가 깔끔해질 것 같네요.
2. 추상 클래스 (abstract class)
- 추상클래스를 상속하는 클래스는 추상클래스에서 정의한 메서드들을 구현해야하는 의무가 있습니다.
- @overried 키워드는 생략 가능합니다.
abstract class Human {
void walk();
}
class Player extends Human {
String name;
int xp;
String team; // 자료형 선언 후
Player({required this.name, required this.xp, required this.team});
void sayHello() {
print("Hi my name is $name");
}
// walk 메서드를 반드시 구현해야한다.
@override
void walk() {
print("$name is walking");
}
}
3. 클래스의 상속 (extends)
- Dart에서 클래스 상속은 다른 객체 지향 언어들과 비슷합니다. 부모 클래스로부터 상속받은 속성과 메소드를 자식 클래스에서 재사용할 수 있습니다.
- 클래스 상속을 위해서는
extends
키워드를 사용합니다.
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;
// Human을 상속하고 있기 때문에 name을 받아야 한다.
// : 문법을 이용해서 초기화 진행
// super 키워드를 이용해서 부모클래스와 소통 가능
Player({
required this.team,
required String name,
}) : super(name);
// Human 클래스의 sayHello 메서드 재정의
@override
void sayHello() {
super.sayHello(); // 기존 부모 클래스의 코드를 그대로 가져오고,
print("I'm in ${team.name} team"); // enum 값을 print할 때는 enum.name으로 출력합니다.
}
}
void main() {
var player = Player(team: Team.blue, name: "mike");
player.sayHello();
}
4. mixin 문법 (with)
- 생성자가 없는 클래스로써 다른클래스에 포함되어 유용하게 쓰여진다.
- with 키워드로 사용가능하고, 재사용이 장점입니다.
class Strong {
final double strengthLevel = 1500.99;
}
class Tall {
final double height = 1.99;
}
class QuickRunner {
void runQuick() {
print("Run!!!!!!!");
}
}
enum Team { red, blue }
// mixin 사용
class Player with Strong, Tall, QuickRunner {
final Team team;
Player({
required this.team,
});
}
// 재사용성
class Tiger with Strong, QuickRunner {}
class basketBallPlayer with Tall {}
void main() {
var player = Player(team: Team.blue);
// with와 함께 사용된 클래스는 mixin 클래스들의 속성이나 메서드들에 접근 가능하다.
print(player.height);
print(player.strengthLevel);
player.runQuick();
}
- player을 위해 mixin ⇒ Strong, Tall, QuickRunner를 만들었습니다.
- 하지만 Tiger나, basketBallPlayer 클래스도 사용할 수 있어서 재사용성이 좋습니다.
- 또한 with로 포함시킨 mixin의 멤버변수나 메서드를 사용할 수 있습니다.
반응형
'Dart' 카테고리의 다른 글
Dart class - named constructor (0) | 2023.04.28 |
---|---|
Dart class - basic (0) | 2023.04.28 |
Dart 함수 (function) 알아보기 (0) | 2023.04.28 |
Dart 자료형 (Data Type) (0) | 2023.04.28 |
Dart 변수 알아보기 ( variables ) (0) | 2023.04.28 |
Comments