class
class Player {
String name = 'hwido';
int xp = 999;
void sayHello() {
print('hi my name is $name');
}
}
void main() {
var player1 = Player();
print(player1.name);
player1.sayHello();
}
위처럼 Player라는 클래스를 만들어 멤버 변수와 메소드를 설정했다. main에서는 객체를 만들어 값을 프린트하거나 메소드를 활용했다.
constructor
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 ($xp)');
}
}
void main() {
var player1 = Player('hwido', 99);
print(player1.name);
player1.sayHello();
}
생성자를 클래스명(매개변수) {}로 만들 수 있다.
그리고 위 코드의 4 ~ 7번 째 줄은 아래로 줄여서 쓸 수 있다.
Player(this.name, this.xp);
class Player {
final String name;
int xp;
String team;
int grade;
Player({required this.name, required this.xp, required this.team, required this.grade,});
void sayHello() {
print('$name, $xp, $team, $grade');
}
}
void main() {
var player1 = Player(
name: 'hwido',
xp: 99,
team: 'Only one',
grade: 100,
);
player1.sayHello();
}
생성자의 매개변수가 많아질 땐 함수를 정의할 때 작성한 방법과 동일하게 null의 포함 여부를 제거하고, 객체를 생성할 때도 인자를 작성해서 값을 전달할 수 있다.
named constructor
class Player {
final String name, team;
int xp, grade;
Player({
required this.name,
required this.xp,
required this.team,
required this.grade,
});
Player.createRedPlayer({required String name, required int grade }) :
this.grade = grade,
this.name = name,
this.xp = 10,
this.team = "Red";
Player.createBluePlayer(String name, int grade) :
this.grade = grade,
this.name = name,
this.xp = 0,
this.team = "Blue";
sayHello() {
print("$name / $team / $xp / $grade");
}
}
void main() {
var player1 = Player.createRedPlayer(
name: "halo",
grade: 4,
);
player1.sayHello();
var player2 = Player.createBluePlayer("sky", 5);
player2.sayHello();
}
이렇게 클래스명.생성자 이름(매개변수) : 를 작성하여 특정 생성자를 만들 수 있다. Red, Blue라는 특정 팀의 팀원을 생성하도록 설정했다.
+ cascade notation
class Player {
String name, team;
int xp, grade;
Player({
required this.name,
required this.xp,
required this.team,
required this.grade,
});
sayHello() {
print("$name / $team / $xp / $grade");
}
}
void main() {
var player = Player(name: "halo", xp: 1, team: "Green", grade: 10)
..name = "hello"
..xp = 100
..team = "Blue"
..grade = 9
..sayHello();
}
위처럼 객체 아래에서 객체 이름을 .로 변경한 후 데이터와 메소드를 활용할 수도 있다.
enum
enum Team { cat, dog }
코딩을 하다보면 철자를 다르게 쓸 때가 있다. 그럴 때를 대비하기 위해 enum을 사용하면 좋다. 위의 예시처럼 원소를 설정해두고,
class Player extends Creature {
final String name;
int xp;
// here
Team team;
int grade;
Player({required this.name, required this.xp, required this.team, required this.grade,});
void sayHello() {
print('$name, $xp, $team, $grade');
}
}
void main() {
var player1 = Player(
name: 'halo',
xp: 99,
// here
team: Team.cat,
grade: 100,
);
player1.sayHello();
}
enum의 이름으로 설정한 Team을 데이터 자료형처럼 사용하면 된다. 그리고 값을 입력할 땐 Team.cat 혹은 Team.dog로 작성하면 된다.
abstract class
abstract class Creature {
void live();
}
abstract class는 추상적인 클래스로 객체를 생성할 수 없다. 대신 추상 클래스에서 설정한 메소드(이름, 반환 타입 + 매개변수까지 설정)를 추상클래스를 상속받는 모든 클래스가 구현해야 한다.
예시로 Creature를 상속받은 Player class를 설정하고 객체를 만들었다.
enum Team { cat, dog }
class Player extends Creature {
final String name;
int xp;
Team team;
int grade;
Player({required this.name, required this.xp, required this.team, required this.grade,});
void sayHello() {
print('$name, $xp, $team, $grade');
}
void live() {
print("Creature is living");
}
}
void main() {
var player1 = Player(
name: 'halo',
xp: 99,
team: Team.cat,
grade: 100,
);
player1.sayHello();
player1.live();
}
Inheritance
class Creature {
final String name;
Creature({required this.name});
void printLive() {
print("I'm alive and my name is $name");
}
}
enum Group { cat, dog }
class Player extends Creature {
Group group;
Player({required name, required this.group,}) : super(name: name);
@override
void printLive() {
super.printLive();
print("And my group is $group");
}
}
void main() {
var player1 = Player(
name: "hwido",
group: Group.cat,
);
player1.printLive();
}
extends라는 키워드를 통해 다른 클래스를 상속받을 수 있다. 상속받은 클래스(sub class)는 상속된 클래스(super class)의 기능과 변수를 가진다.
상속받은 클래스가 상속된 클래스의 변수를 설정하거나 함수를 달리 정의할 수 있다. 생성자 옆에 ': super(변수명: 인수)'를 작성하여 상속된 클래스 변수 값을 설정할 수 있다. 그리고 @override통해 super class의 멤버 함수를 달리 정의할 수 있다.
https://nomadcoders.co/flutter-for-beginners/lobby
Flutter 로 웹툰 앱 만들기 – 노마드 코더 Nomad Coders
Flutter for Beginners
nomadcoders.co
'Flutter 공부' 카테고리의 다른 글
| Dart: variables (0) | 2023.04.03 |
|---|
댓글