๊ธฐ์ด ๋ฌธ๋ฒ
โข
๋ณ์
โข
ํ์
โข
Null Safety
โข
์์
โข
์ฐ์ฐ์
โข
์ ์ด๋ฌธ
โฆ
์กฐ๊ฑด๋ฌธ
โฆ
๋ฐ๋ณต๋ฌธ
๋ณ์
๋ฐ์ดํฐ(๊ฐ)๋ฅผ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
Dart์์๋ ๋ณ์๋ช
์ ์นด๋ฉ ์ผ์ด์ค(CamelCase)๋ก ์์ฑํ๋ ๊ฒ์ด ๊ด๋ก์
๋๋ค.
๋ณ์ ์ ์ธ
var ๋ณ์๋ช
;
Dart
๋ณต์ฌ
๋ณ์ ์ด๊ธฐํ
๋ณ์๋ช
= ๊ฐ;
Dart
๋ณต์ฌ
๋ณ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ
var ๋ณ์๋ช
= ๊ฐ;
Dart
๋ณต์ฌ
ํ์
๋ฐ์ดํฐ(๊ฐ)์ ํํ
์ข
๋ฅ | ํ์
ํค์๋ | ์ค๋ช
|
์ซ์ํ | int | ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋
๋๋ค. |
- | double | ๋ถ๋ ์์์ ์ซ์(์ค์)๋ฅผ ๋ํ๋
๋๋ค. |
- | num | int, double ์ ์์ ํ์
|
๋ฌธ์ํ | String | ๋ฌธ์์ด์ ๋ํ๋
๋๋ค. |
๋ถ๋ฆฌ์ธ | bool | ์ฐธ(true) ๋๋ ๊ฑฐ์ง(false) ๊ฐ์ ๋ํ๋
๋๋ค. |
์ถ๋ก ํ | var | ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ด๊ธฐ๊ฐ์ ๋ฐ๋ผ ํ์
์ ์ถ๋ก ํฉ๋๋ค. |
- | dynamic | ๋ชจ๋ ๋ฐ์ดํฐ ํ์
์ ๊ฐ์ง ์ ์๋ ๋์ ํ์
์
๋๋ค. |
์ปฌ๋ ์
| List | ์์๊ฐ ์๋ ๋ฆฌ์คํธ(๋ฐฐ์ด)๋ฅผ ๋ํ๋
๋๋ค. |
- | Set | ์ค๋ณต๋์ง ์๋ ํญ๋ชฉ๋ค์ ์งํฉ์ ๋ํ๋
๋๋ค. |
- | Map | ํค-๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋งต(๋์
๋๋ฆฌ)์ ๋ํ๋
๋๋ค. |
ํ์ ๊ณ์ธต
Null Safety
๋ณ์๋ ๊ฐ์ฒด๊ฐ null ๊ฐ์ ๊ฐ์ง ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ช
์์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ null ์ฐธ์กฐ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ ๊ธฐ๋ฅ
โข
๋ ํ์ฉ ํ์
(Nullable types)
โข
Null ์ฒดํฌ
โข
late ํค์๋
๋ ํ์ฉ ํ์ (Nullable types)
ํ์
? - ํ์
๋ค์ ? ๋ฅผ ๋ถ์ด๋ฉด ํด๋น ๋ณ์๋ ๊ฐ์ฒด๊ฐ null ๊ฐ์ ๊ฐ์ง ์ ์์์ ์๋ฏธํฉ๋๋ค.
int? nullIntNumber;
String? nullString;
Dart
๋ณต์ฌ
Dart 2.12 ๋ฒ์ ์ดํ์๋ ๋ ์์ ์ฑ์ ๊ฐํํ๊ธฐ ์ํด ํ์
๋ค์ ?๋ฅผ ์ฌ์ฉํ์ฌ ๋ ํ์ฉ ํ์
์ ์ง์ํฉ๋๋ค.
Null ์ฒดํฌ
nullable ํ์
์ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋๋ null ์ฒดํฌ๋ฅผ ํด์ผ ํฉ๋๋ค.
flutter ์์๋ ๋ ํ์ฉ ํ์
์ Null ์ฒดํฌ ํ์ง ์๊ณ ์ ๊ทผํ๋ฉด โ์ปดํ์ผ ์๋ฌโ ๊ฐ ๋ฐ์ํฉ๋๋ค.
โข
Null ์ฒดํฌ ์์
String? name;
if (name != null) {
print(name.length); // ์์ ํ๊ฒ name์ ์ฌ์ฉํ ์ ์์
}
Dart
๋ณต์ฌ
โข
?? (null ๋ณํฉ ์ฐ์ฐ์): null ๊ฐ์ ๋์ฒดํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
String? name;
String displayName = name ?? 'Guest';
Dart
๋ณต์ฌ
โข
?. (null-aware ์ ๊ทผ ์ฐ์ฐ์): ๊ฐ์ฒด๊ฐ null์ด ์๋ ๊ฒฝ์ฐ์๋ง ํด๋น ๋ฉค๋ฒ์ ์ ๊ทผํฉ๋๋ค.
String? name;
print(name?.length);
Dart
๋ณต์ฌ
โข
??= (null ๋ณํฉ ํ ๋น ์ฐ์ฐ์): ๋ณ์๊ฐ null์ธ ๊ฒฝ์ฐ์๋ง ๊ฐ์ ํ ๋นํฉ๋๋ค.
String? name;
name ??= 'Guest';
Dart
๋ณต์ฌ
late ํค์๋
late int lateNumber;
Dart
๋ณต์ฌ
late ํค์๋๋ ๋ณ์์ ์ด๊ธฐํ๋ฅผ ๋์ค์ ํ๊ฒ ๋ค๊ณ ์ ์ธํฉ๋๋ค.
โข
๋น๋๊ธฐ ํต์ ์ ํตํด์ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฌ ๊ฒ์ด ํ์ ๋์ด ์๋ ๊ฒฝ์ฐ์ ์ฃผ๋ก ์ฌ์ฉ
์์
const | final | |
์ ์ธ ์์ | ์ปดํ์ผ ํ์ ์์ | ๋ฐํ์ ์์ |
๊ฐ ํ ๋น | ์ ์ธ ์์๋ง ๊ฐ ํ ๋น ๊ฐ๋ฅ | ์ ์ธ ํ์ ๊ฐ ํ ๋น ๊ฐ๋ฅ |
ํ ๋น ๊ฐ๋ฅ ์ฌ๋ถ | ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋ ๊ฐ๋ง ๊ฐ๋ฅ | ๋ฐํ์์ ๊ฒฐ์ ๋ ๊ฐ ํ ๋น ๊ฐ๋ฅ |
ํ์ฉ ์์ | ์์ ๋ฌธ์์ด, ์ซ์ ๋ฑ ๋ฆฌํฐ๋ด ๊ฐ ์ฌ์ฉ | ์ค์ ํ ๋ณ๊ฒฝํ์ง ์์์ผ ํ๋ ๊ฐ ์ง์ |
์ฐ์ฐ์
๊ธฐ๋ณธ ์ฐ์ฐ์
์ฐ์ฐ์ | ์ค๋ช
| ์์ |
+ | ๋ํ๊ธฐ | a + b |
- | ๋นผ๊ธฐ | a - b |
* | ๊ณฑํ๊ธฐ | a * b |
/ | ๋๋๊ธฐ | a / b |
% | ๋๋จธ์ง | a % b |
++ | ์ฆ๊ฐ | a++ ๋๋ ++a |
-- | ๊ฐ์ | a-- ๋๋ --a |
+= | ๋ํ๊ณ ํ ๋น | a += b |
-= | ๋นผ๊ณ ํ ๋น | a -= b |
*= | ๊ณฑํ๊ณ ํ ๋น | a *= b |
/= | ๋๋๊ณ ํ ๋น | a /= b |
%= | ๋๋จธ์ง๋ฅผ ๊ณ์ฐํ๊ณ ํ ๋น | a %= b |
ํ์ ์ฐ์ฐ์
์ฐ์ฐ์ | ์ค๋ช
| ์์ |
as | ํ์
๋ณํ | var x = a as int |
is | ํ์
์ฒดํฌ | if (x is int) |
is! | ํ์
์ด ์๋์ง ์ฒดํฌ | if (x is! String) |
Null ์ฐ์ฐ์
์ฐ์ฐ์ | ์ค๋ช
| ์์ |
?? | null์ผ ๋ ๊ธฐ๋ณธ๊ฐ ์ค์ | var y = x ?? defaultValue |
?. | null ์ฒดํฌ ํ ์ ๊ทผ | var length = str?.length |
??= | null์ผ ๋๋ง ๊ฐ ํ ๋น | a ??= b |
! | Non-null ๋จ์ธ ์ฐ์ฐ์ | a! |
โข
?? ์ฐ์ฐ์๋ ์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ null์ด ์๋๋ฉด ์ผ์ชฝ ๊ฐ์, null์ด๋ฉด ์ค๋ฅธ์ชฝ ๊ฐ์ ๋ฐํํฉ๋๋ค.
โข
?. ์ฐ์ฐ์๋ ์ข๋ณ์ด null์ด๋ฉด ๋ฌด์ํ๊ณ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์์ ์ ๊ทผํ์ง ์์ต๋๋ค.
โข
??= ์ฐ์ฐ์๋ ์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ null์ด๋ฉด ์ค๋ฅธ์ชฝ ๊ฐ์ ์ผ์ชฝ ๋ณ์์ ํ ๋นํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ผ์ชฝ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
โข
! ์ฐ์ฐ์๋ Non-null ๋จ์ธ ์ฐ์ฐ์๋ก, ๋ณ์๊ฐ null์ด ์๋์ ๋จ์ธํฉ๋๋ค. ์ฌ์ฉ ์ ์ฃผ์๊ฐ ํ์ํ๋ฉฐ, null์ผ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ ์ด๋ฌธ
โข
์กฐ๊ฑด๋ฌธ
โข
๋ฐ๋ณต๋ฌธ
์กฐ๊ฑด๋ฌธ
โข
if-else
int x = 10;
if (x > 0) {
print('์์์
๋๋ค.');
} else if (x < 0) {
print('์์์
๋๋ค.');
} else {
print('0์
๋๋ค.');
}
Dart
๋ณต์ฌ
โข
switch
String fruit = 'apple';
switch (fruit) {
case 'apple':
print('์ฌ๊ณผ์
๋๋ค.');
break;
case 'banana':
print('๋ฐ๋๋์
๋๋ค.');
break;
default:
print('์ ์ ์๋ ๊ณผ์ผ์
๋๋ค.');
}
Dart
๋ณต์ฌ
๋ฐ๋ณต๋ฌธ
โข
for
for (int i = 1; i <= 5; i++) {
print('ํ์ฌ ์ซ์๋ $i์
๋๋ค.');
}
Dart
๋ณต์ฌ
โข
while
int count = 0;
while (count < 3) {
print('์นด์ดํธ: $count');
count++;
}
Dart
๋ณต์ฌ
โข
do-while
int num = 5;
do {
print('์ซ์: $num');
num--;
} while (num > 0);
Dart
๋ณต์ฌ