1. 강의 페이지
https://nomadcoders.co/dart-for-beginners
Dart 시작하기 – 노마드 코더 Nomad Coders
Flutter 앱 개발을 위한 Dart 배우기
nomadcoders.co
2. Dart 연습실 in web
Dart를 설치하지 않고 실행 결과를 확인할 수 있는 서비스
Command + Enter를 통해 Run 가능
DartPad
dartpad.dev
3. class 기본 예제
class Player {
String name = "Harry";
int xp = 1500;
}
void main() {
var user = Player();
print(user.name);
user.name = "Max";
print(user.name);
}
4. class 내에 함수 활용 기본 예제
class Player {
String name = "Harry";
int xp = 1500;
void sayHello() {
print("Hi, I'm $name");
}
}
void main() {
var user = Player();
print(user.name);
user.name = "Max";
print(user.name);
user.sayHello();
}
5. class안의 함수에서 동일 이름 변수 활용 예제
- 함수 안에서의 name은 private하여 class의 name을 수정하지는 않습니다.
class Player {
String name = "Harry";
int xp = 1500;
void sayHello() {
var name = "Jay";
print("Hi, I'm $name");
}
}
void main() {
var user = Player();
print(user.name);
user.sayHello();
print(user.name);
}
2개의 다른 name을 함수 내에서 사용한다면 아래와 같이 활용합니다.
하지만 class method 내에서 this를 사용하는 것은 권장되지 않기 때문에, 가능하다면 동일한 변수명을 사용하지 않는 것이 좋습니다.
class Player {
String name = "Harry";
int xp = 1500;
void sayHello() {
var name = "Jay";
print("Hi, I'm ${this.name}");
print("Hi, You're $name");
}
}
void main() {
var user = Player();
print(user.name);
user.sayHello();
print(user.name);
}
6. class의 특정 변수 value를 바꿀 수 없게 하려면, final을 사용
class Player {
// name을 변경할 수 없도록 final 지정
final String name = "Harry";
int xp = 1500;
void sayHello() {
print("Hi, You're $name");
}
}
void main() {
var user = Player();
user.sayHello();
}
7. Constructors를 활용한 class 기본 예제
- positional arguments 사용 예시
class Player {
final String name;
int xp;
Player(this.name, this.xp);
void sayHello() {
print("Hi, You're $name");
}
}
void main() {
var user1 = Player("Jay", 2000);
user1.sayHello();
var user2 = Player("Harry", 990);
user2.sayHello();
}
- Named Constructor Parameters 사용 예시
class Player {
final String name;
int xp;
String team;
int age;
Player({
required this.name,
required this.xp,
required this.team,
required this.age
});
void sayHello() {
print("Hi, You're $name");
}
}
void main() {
var user1 = Player(
name: "Jay",
xp: 2000,
team: "blue",
age: 19
);
user1.sayHello();
var user2 = Player(
name: "Harry",
xp: 990,
team: "red",
age: 25
);
user2.sayHello();
}
8. : (콜론)을 활용한 객체 초기화 예제
class Player {
final String name;
int xp, age;
String team;
Player({
required this.name,
required this.xp,
required this.team,
required this.age
});
Player.createBlueTeamMember({
required String name,
required int age
}) : this.age = age,
this.name = name,
this.team = "blue",
this.xp = 0;
void sayInfo() {
print("Hi, You're $name in $team team. $age years old.");
}
}
void main() {
var user1 = Player.createBlueTeamMember(
name: "Jay",
age: 19
);
user1.sayInfo();
}
아래는 응용 버전의 코드입니다.
- blue team member 만들기에서는 Named Constructor Parameters 사용
- red team member 만들기에서는 positional arguments 사용
class Player {
final String name;
int xp, age;
String team;
Player({
required this.name,
required this.xp,
required this.team,
required this.age
});
Player.createBlueTeamMember({
required String name,
required int age
}) : this.age = age,
this.name = name,
this.team = "blue",
this.xp = 0;
Player.createRedTeamMember(
String name, int age
) : this.name = name,
this.age = age,
this.team = "red",
this.xp = 0;
void sayInfo() {
print("Hi, You're $name in $team team. $age years old.");
}
}
void main() {
var user1 = Player.createBlueTeamMember(
name: "Jay",
age: 19
);
user1.sayInfo();
var user2 = Player.createRedTeamMember(
"Harry", 25
);
user2.sayInfo();
}
9. json 데이터를 객체화하여 사용하는 기본 예제
class Player {
final String name;
int xp;
String team;
Player.fromJson(Map<String, dynamic> playerJson)
: name = playerJson["name"],
xp = playerJson["xp"],
team = playerJson["team"];
void sayHello() {
print("Hi, my name is $name in $team team. My xp is $xp.");
}
}
void main() {
var apiData = [
{
"name": "Harry",
"team": "red",
"xp": 0
},
{
"name": "Jay",
"team": "blue",
"xp": 0
},
{
"name": "Max",
"team": "red",
"xp": 0
}
];
apiData.forEach((playerJson) {
var user = Player.fromJson(playerJson);
user.sayHello();
});
}
10. Cascade Notation (Cascade Operator) 사용 예제
- Cascade Notation(Cascade Operator)을 사용하지 않을 경우 아래와 같습니다.
class Player {
String name, team;
int xp;
Player(
{
required this.name,
required this.xp,
required this.team
}
);
void sayHello() {
print("Hi, my name is $name in $team team. My xp is $xp.");
}
}
void main() {
var user1 = Player(name: "Harry", xp: 1200, team: "red");
user1.name = "Jay";
user1.xp = 9900;
user1.team = "blue";
user1.sayHello();
}
- Cascade Notation(Cascade Operator)을 사용할 경우 아래와 같습니다.
class Player {
String name, team;
int xp;
Player(
{
required this.name,
required this.xp,
required this.team
}
);
void sayHello() {
print("Hi, my name is $name in $team team. My xp is $xp.");
}
}
void main() {
var user1 = Player(name: "Harry", xp: 1200, team: "red");
var tryReset = user1
..name = "Jay"
..xp = 9900
..team = "blue"
..sayHello();
}
11. enum 사용 예제
enum Team { red, blue }
enum XPLevel { beginner, medium, pro }
class Player {
String name;
Team team;
XPLevel xp;
Player(
{
required this.name,
required this.xp,
required this.team
}
);
void sayHello() {
print("Hi, my name is $name in $team team. My xp is $xp.");
}
}
void main() {
var user1 = Player(
name: "Harry",
xp: XPLevel.beginner,
team: Team.red
);
var tryReset = user1
..name = "Jay"
..xp = XPLevel.pro
..team = Team.blue
..sayHello();
}
12. abstract class를 활용한 extends 기본 예제
abstract class Human {
void walk();
}
enum Team { red, blue }
enum XPLevel { beginner, medium, pro }
class Player extends Human {
String name;
Team team;
XPLevel xp;
Player(
{
required this.name,
required this.xp,
required this.team
}
);
void walk() {
print("I'm walking.");
}
void sayHello() {
print("Hi, my name is $name in $team team. My xp is $xp.");
}
}
class Coach extends Human {
void walk() {
print("He is walking...");
}
}
void main() {
var user1 = Player(
name: "Harry",
xp: XPLevel.beginner,
team: Team.red
)
..sayHello();
var tryReset = user1
..name = "Jay"
..xp = XPLevel.pro
..team = Team.blue
..sayHello()
..walk();
var teacher = Coach()
..walk();
}
13. super를 활용한 기본 예제
class Human {
final String name;
Human(this.name);
void sayHelli() {
print("Hi I'm $name");
}
}
enum Team { red, blue }
class Player extends Human {
final Team team;
Player({
required this.team,
required String name
}) : super(name);
}
void main() {
var user = Player(team: Team.red, name: "Harry");
user.sayHelli();
}
- 깨알 복습 : named argument를 사용하는 방식으로 코드 변경하기
class Human {
final String name;
Human({required this.name});
void sayHello() {
print("Hi I'm $name");
}
}
enum Team { red, blue }
class Player extends Human {
final Team team;
Player({
required this.team,
required String name
}) : super(name: name);
}
void main() {
var user = Player(team: Team.red, name: "Harry");
user.sayHello();
print(user.team);
print(user.name);
}
14. override를 활용한 기본 예제
@override로 Human의 sayHello를 덮어씁니다.
class Human {
final String name;
Human({required this.name});
void sayHello() {
print("Hi I'm $name");
}
}
enum Team { red, blue }
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 $team");
}
}
void main() {
var user = Player(team: Team.red, name: "Harry");
user.sayHello();
print(user.team);
print(user.name);
}
15. Mixins를 사용한 기본 예제
Mixins는 생성자가 없는 클래스를 의미합니다.
일단, 아래는 Mixins를 사용하기 전 기본 코드입니다.
enum Team { red, blue }
class Player {
final Team team;
Player({
required this.team
});
}
void main() {
}
Mixins를 사용해 코드를 작성합니다.
enum Team { red, blue }
class Strong {
double strengthLevel = 95.3;
}
class QuickRunner {
void hurryUp() {
print("Ruuuuuun!");
}
}
class Tall {
final double height = 183.9;
}
class Player with Strong, QuickRunner, Tall {
final Team team;
Player({
required this.team
});
}
class Horse with Strong, QuickRunner {}
class Kid with QuickRunner {}
void main() {
var user = Player(team: Team.red);
user.hurryUp();
var myPet = Horse();
print(myPet.strengthLevel);
}
'Development > Flutter (Dart)' 카테고리의 다른 글
[Dart] 반복문 (for, for-in, forEach) 기본 예제 (0) | 2023.05.05 |
---|---|
[Dart] 조건문 (if-else, switch-case) 기본 예제 (0) | 2023.05.05 |
[Dart][Flutter] nomadcoders dart-for-beginners 3일차 #3 강의 정리 (0) | 2023.05.03 |
[Dart][Flutter] nomadcoders dart-for-beginners 2일차 #2 Data Types 강의 정리 (0) | 2023.05.03 |
[Dart][Flutter] nomadcoders dart-for-beginners 1일차 #1 Variables 강의 정리 (0) | 2023.05.01 |