
โ . ์๋ก : null safety๊ฐ ์ค์ํ ์ด์
๐ null ๊ฐ์ด๋? null์ด ๋ฌด์์ ์๋ฏธํ๋๊ฐ? (null ๊ฐ์ด ๋ฐ์ํ๋ ์์ธ)
๐ null๋ก ์ธํ ์ค๋ฅ ๋ฐฉ์ง์ ํ์์ฑ
โ ก. ๋ณธ๋ก : Dart์ null safety ๊ฐ๋ ๊ณผ ํ์ฉ๋ฒ
๐ Step 1: null safety๋? (๊ธฐ๋ณธ ๊ฐ๋ ์ดํด)
๐ Step 2: nullable(?) vs non-nullable ๋ณ์
๐ Step 3: null ๊ฐ ๋ค๋ฃจ๊ธฐ (!, ??, ??= ์ฐ์ฐ์ ํ์ฉ)
๐ Step 4: late ํค์๋ ์ฌ์ฉ๋ฒ (๋ณ์๋ฅผ ๋์ค์ ์ด๊ธฐํํ๊ธฐ)
๐ Step 5: null safety๋ฅผ ํ์ฉํ ์์ ํ ์ฝ๋ ์์ฑ
โ ข. null safety๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ
๐ null ์์ ์ฑ์ ๊ณ ๋ คํ ์ฝ๋ ์คํ์ผ
๐ null safety๋ฅผ ์ฌ์ฉํ๋ฉด ์ป์ ์ ์๋ ์ฅ์
null safety๋?
Dart์ null ์์ ์ฑ ์ดํดํ๊ธฐ ๐๐
Dart๋
null safety (๋ ์์ ์ฑ) ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ
null๋ก ์ธํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ
์ฝ๋ ์์ ์ฑ์ ๋์ ๋๋ค.
Flutter ๊ฐ๋ฐ์์
null safety๋ฅผ ์ดํดํ๊ณ
์ฌ๋ฐ๋ฅด๊ฒ ํ์ฉํ๋ฉด,
์ฑ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ
์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋
Dart์ null safety ๊ฐ๋ ๊ณผ ํ์ฉ๋ฒ์
์์ ์ ํจ๊ป ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. ๐
๋จผ์
๋ ๋ง์ ์ ๋ณด, ํน์
์์๋๋ก ํฌ์คํ
์ ๋ณด๊ณ ์ถ๋ค๋ฉด
์๋ ๋
ธ์
์ ํ์ธํด์ฃผ์ธ์.

https://mongmung-i.notion.site/Flutter-1a39b1e2cdaa80319a0fc2a89281dc71?pvs=4
Flutter ์ดํ ๊ฐ๋ฐ ์ผ์ง | Notion
Made with Notion, the all-in-one connected workspace with publishing capabilities.
mongmung-i.notion.site
https://mongmung-i.notion.site/19f9b1e2cdaa80a984ade6141a87fd29?pvs=4
์ฐฝ์ ํธ๋ ์ฌ์ ์บ ํ ๐ฒ | Notion
์ด ๊ณณ์ ์ฐฝ์ ํธ๋ ์ฌ์ ์บ ํ ์งํ ์ฌํญ์ ์ ๋ฆฌํ๋ ๊ณณ์ ๋๋ค.
mongmung-i.notion.site
โ . ์๋ก : null safety๊ฐ ์ค์ํ ์ด์ ๐ค
null ๊ฐ์ด๋? null์ด ๋ฌด์์ ์๋ฏธํ๋๊ฐ?
null(๋)์
'์๋ฌด๊ฒ๋ ์๋ ์ํ'๋ฅผ
์๋ฏธํ๋ ํน๋ณํ ๊ฐ์ ๋๋ค.
Dart์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก
๋ชจ๋ ๋ณ์๊ฐ null ๊ฐ์
๊ฐ์ง ์ ์๋๋ก ์ค๊ณ๋์ด ์์ง๋ง,
๋ช
์์ ์ผ๋ก
nullable ๋ณ์(? ์ฌ์ฉ)๋ฅผ ์ ์ธํ๋ฉด
null์ ํ์ฉํ ์ ์์ต๋๋ค.
๐ก null ๊ฐ์ ์ธ์ ๋ฐ์ํ ๊น?
โ
๋ณ์๊ฐ ์ด๊ธฐํ๋์ง ์์ ๊ฒฝ์ฐ
โ
๋คํธ์ํฌ ์์ฒญ์์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ
โ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ๊ฐ์ ธ์ค์ง ๋ชปํ ๊ฒฝ์ฐ
โก null ๊ฐ์ด ๋ฐ์ํ๋ฉด, ํ๋ก๊ทธ๋จ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ์ํ์ด ์์! ๐จ
์๋ฅผ ๋ค์ด, ์๋ ์ฝ๋์์ name ๋ณ์๋
์ด๊ธฐํ๋์ง ์์์ผ๋ฏ๋ก null ๊ฐ์ ๊ฐ์ง๋๋ค.
void main() {
String? name;
print(name); // ์ถ๋ ฅ: null
}
โก ์ฆ, null ๊ฐ์ ๋ณ์๊ฐ '์์ง ๊ฐ์ด ํ ๋น๋์ง ์์ ์ํ'๋ฅผ ๋ํ๋์ ์๋ฏธํฉ๋๋ค.
โ null์ ์กฐ์ฌํด์ผ ํ๋ ์ด์ ?
- null ๊ฐ์ ์๋ชป ์ฌ์ฉํ๋ฉด ์ฑ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ์ ์์
- null์ ์์ํ์ง ๋ชปํ๊ณ ์ฐ์ฐ์ ์ํํ๋ฉด NullPointerException์ด ๋ฐ์ํ ์ ์์
- Flutter UI์์ null ๊ฐ์ด ๊ทธ๋๋ก ์ฌ์ฉ๋๋ฉด ๋น ํ๋ฉด ๋๋ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
๐ก Dart์์๋
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
null safety ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ,
null ๊ฐ์ด ๋ฐ์ํ ์ ์๋ ์ํฉ์
๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ์๋๋ก ๋์ต๋๋ค. ๐
โก ์ด์ null safety ๊ฐ๋ ์ ์ดํด๋ณด๋ฉด์, ์ด๋ป๊ฒ null์ ์์ ํ๊ฒ ๋ค๋ฃฐ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค! ๐ฏ
null๋ก ์ธํ ์ค๋ฅ ๋ฐฉ์ง์ ํ์์ฑ
โ
null ๊ฐ์ด ํฌํจ๋ ๋ณ์๋ฅผ ์๋ชป ์ฐธ์กฐํ๋ฉด NullPointerException ๋ฐ์
โ
Dart์ null safety๋ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์์ฒ์ ์ผ๋ก ๋ฐฉ์ง
โ
Flutter ์ฑ์์ ์์ ์ ์ธ ์ํ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํจ
โก ์ด์ Dart์ null safety ๊ฐ๋ ์ ํ๋์ฉ ์ดํด๋ณด๊ฒ ์ต๋๋ค! ๐ฏ
โ ก. ๋ณธ๋ก : Dart์ null safety ๊ฐ๋ ๊ณผ ํ์ฉ๋ฒ ๐๏ธ
Step 1: null safety๋? (๊ธฐ๋ณธ ๊ฐ๋ ์ดํด)
null safety๋
Dart์์ null ๊ฐ์
์์ ํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก
์ค๊ณ๋ ๊ธฐ๋ฅ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ณ์๋
null ๊ฐ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ,
null์ ํ์ฉํ๋ ค๋ฉด
?๋ฅผ ์ฌ์ฉํด
nullable ๋ณ์๋ก ์ ์ธํด์ผ ํฉ๋๋ค.
null safety๊ฐ ์๋ ์์ ์๋,
๋ณ์๋ฅผ ์ ์ธํ๊ณ ๋์
๊ฐ์ด ์ด๊ธฐํ๋์ง ์์๊ฑฐ๋,
๋คํธ์ํฌ ์์ฒญ์์
์์์น ๋ชปํ null ๊ฐ์ด ๋ฐํ๋ ๊ฒฝ์ฐ
ํ๋ก๊ทธ๋จ์ด ๋น์ ์์ ์ผ๋ก
์ข ๋ฃ๋ ์ํ์ด ์์์ต๋๋ค.
Dart๋
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
null safety๋ฅผ ๋์ ํ์ฌ
๊ฐ๋ฐ์๊ฐ ๋ช ํํ๊ฒ
null์ ๋ค๋ฃฐ ์ ์๋๋ก ํ์ต๋๋ค.
โ
Dart๋ null safety๋ฅผ ํตํด null ์ค๋ฅ๋ฅผ ๋ฐฉ์งํจ
โ
๋ชจ๋ ๋ณ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก null์ ํ์ฉํ์ง ์์ (non-nullable by default)
void main() {
String text = null; // โ ์ค๋ฅ ๋ฐ์ (null ํ ๋น ๋ถ๊ฐ)
}
โก ๊ธฐ๋ณธ์ ์ผ๋ก null์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก, null์ ์ฌ์ฉํ๋ ค๋ฉด ?๋ฅผ ๋ช ์ํด์ผ ํจ! ๐ฏ
๋ช ์๋ฅผ ์ํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ต๋๋ค.
๐ก ์ null safety๊ฐ ์ค์ํ๊ฐ?
- ํ๋ก๊ทธ๋จ ์คํ ์ค null ๊ฐ์ด ๋ฐ์ํ๋ฉด ์ฑ์ด ์ถฉ๋ํ ๊ฐ๋ฅ์ฑ์ด ๋์
- null ์์ ์ฑ์ ํตํด ์ปดํ์ผ๋ฌ๊ฐ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๊ฐ์งํ์ฌ ์ฑ์ ๋ ์์ ์ ์ผ๋ก ์คํํ ์ ์์
- Flutter UI์์ null safety๋ฅผ ํ์ฉํ๋ฉด, NullPointerException์ ๋ฐฉ์งํ์ฌ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง
โก Dart์์ null์ ์์ ํ๊ฒ ๋ค๋ฃจ๋ ค๋ฉด ?, !, ??, late ๋ฑ์ ํค์๋๋ฅผ ํ์ฉํด์ผ ํฉ๋๋ค. ๐
Step 2: nullable(?) vs non-nullable ๋ณ์
๊ธฐ๋ณธ์ ์ผ๋ก Dart์ ๋ชจ๋ ๋ณ์๋
non-nullable(๋์ ํ์ฉํ์ง ์์)์ ๋๋ค.
์ฆ, null ๊ฐ์ ๊ฐ์ง๋ ค๋ฉด
?๋ฅผ ๋ช ์์ ์ผ๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค.
โ nullable ๋ณ์ (? ์ฌ์ฉ)
void main() {
String? message = null; // โ
null ํ ๋น ๊ฐ๋ฅ
print(message); // ์ถ๋ ฅ: null
}
- nullable ๋ณ์๋ null์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ๋์ null ์ฒดํฌ ํ์
โ non-nullable ๋ณ์ (null ํ์ฉ X)
void main() {
String message = 'Hello'; // โ
null์ด ์๋ ๊ฐ๋ง ํ ๋น ๊ฐ๋ฅ
print(message);
}
- non-nullable ๋ณ์๋ ๋ฐ๋์ ์ด๊ธฐํ๋์ด์ผ ํ๋ฉฐ, null์ ์ ์ฅํ ์ ์์
- ์ปดํ์ผ๋ฌ๊ฐ null ํ ๋น์ ๋ง์์ฃผ๋ฏ๋ก ์์ ํ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
๐ nullable ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด null ๊ฐ ์ฒ๋ฆฌ๋ฅผ ๋ช ํํ๊ฒ ๊ด๋ฆฌ ๊ฐ๋ฅ! ๐ฏ
๐ก ์ธ์ nullable ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
- ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋ (์๋ฒ ์๋ต์ด ์์ ๊ฒฝ์ฐ null์ด ๋ ์ ์์)
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ์ง ์์ ๊ฐ์ ๋ฏธ๋ฆฌ ์ ์ธํด์ผ ํ ๋
- ์ด๊ธฐ๊ฐ ์์ด ์ ์ธํ์ง๋ง, ๋์ค์ ๊ฐ์ด ์ค์ ๋ ๊ฒฝ์ฐ
โก nullable ๋ณ์๋ null ์ฒดํฌ๊ฐ ํ์์ ์ด๋ฉฐ, ์์ ํ ์ฝ๋ ์์ฑ์ ์ํด ??, ??= ๋ฑ์ ์ฐ์ฐ์๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๐ฏ
null ๊ฐ ๋ค๋ฃจ๊ธฐ (!, ??, ??= ์ฐ์ฐ์ ํ์ฉ) ๋ณด์ ์ค๋ช
Dart์์๋ null ๊ฐ์ ๋ค๋ฃฐ ๋,
๋ค์ํ ์ฐ์ฐ์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
null safety๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด
!, ??, ??= ์ฐ์ฐ์์ ๋์ ๋ฐฉ์์ ์ดํดํด์ผ ํฉ๋๋ค.
โ ! ์ฐ์ฐ์ (null์ด ์๋์ ๋ณด์ฅํ ๋ ์ฌ์ฉ)
void main() {
String? name;
print(name!.length); // โ ์ค๋ฅ ๋ฐ์ (name์ด null์ผ ๊ฒฝ์ฐ ๋ฐํ์ ์ค๋ฅ ๋ฐ์)
}
- ?? ์ฐ์ฐ์๋ ๋ณ์๊ฐ null์ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
- UI์์ null ๊ฐ์ ํ์ํ ๋ ๊ธฐ๋ณธ ํ ์คํธ๋ฅผ ์ ๊ณตํ๋ ์ฉ๋๋ก ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
โ ?? ์ฐ์ฐ์ (null์ด๋ฉด ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ)
void main() {
String? name;
print(name ?? '๊ธฐ๋ณธ ์ด๋ฆ'); // ์ถ๋ ฅ: ๊ธฐ๋ณธ ์ด๋ฆ
}
- ?? ์ฐ์ฐ์๋ ๋ณ์๊ฐ null์ด๋ฉด ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
- UI์์ null ๊ฐ์ ํ์ํ ๋ ๊ธฐ๋ณธ ํ ์คํธ๋ฅผ ์ ๊ณตํ๋ ์ฉ๋๋ก ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
โ ??= ์ฐ์ฐ์ (null์ผ ๊ฒฝ์ฐ ์๋ก์ด ๊ฐ ํ ๋น)
void main() {
String? message;
message ??= '์๋ก์ด ๊ฐ'; // message๊ฐ null์ด๋ฉด '์๋ก์ด ๊ฐ' ํ ๋น
print(message); // ์ถ๋ ฅ: ์๋ก์ด ๊ฐ
}
- ??= ์ฐ์ฐ์๋ null์ผ ๊ฒฝ์ฐ ์๋ก์ด ๊ฐ์ ํ ๋นํ๋๋ฐ ์ ์ฉํฉ๋๋ค.
๐ก null safety ์ฐ์ฐ์๋ฅผ ํ์ฉํด์ผ ํ๋ ์ํฉ
- ์ฌ์ฉ์ ์ ๋ ฅ์ด null์ผ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณต (??)
- ๋ณ์ ์ด๊ธฐํ๊ฐ ํ์คํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ์ค์ (??=)
- ๊ฐ์ด null์ด ์๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํ๋ ๊ฒฝ์ฐ (!) - ๋จ, ์ฌ์ฉ ์ ์ฃผ์!
โก ์ด ์ฐ์ฐ์๋ฅผ ์ ์ ํ ์ฌ์ฉํ๋ฉด null๋ก ์ธํ ์ค๋ฅ๋ฅผ ์๋ฐฉํ ์ ์์! ๐
Step 4: late ํค์๋ ์ฌ์ฉ๋ฒ (๋ณ์๋ฅผ ๋์ค์ ์ด๊ธฐํํ๊ธฐ) ๋ณด์ ์ค๋ช
late ํค์๋๋ ๋ณ์๋ฅผ ์ ์ธํ ๋
์ฆ์ ์ด๊ธฐํํ์ง ์๊ณ ,
๋์ค์ ๊ฐ์ ํ ๋นํ ์ ์๋๋ก
๋์์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก non-nullable ๋ณ์๋
๋ฐ๋์ ์ด๊ธฐํํด์ผ ํ์ง๋ง,
Flutter UI์์๋
๊ฐ์ด ๋์ค์ ์ค์ ๋๋
๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์
late๋ฅผ ํ์ฉํ๋ฉด ์ ์ฉํฉ๋๋ค.
โ late ๋ณ์ ์ ์ธ ํ ๋์ค์ ๊ฐ ํ ๋น
void main() {
late String name;
name = 'Flutter';
print(name); // Flutter
}
- late ํค์๋๋ ๋ณ์๋ฅผ ๋์ค์ ์ด๊ธฐํํ ํ์๊ฐ ์์ ๋ ์ ์ฉํฉ๋๋ค.
- ๋จ, late ๋ณ์๋ฅผ ์ด๊ธฐํํ์ง ์๊ณ ์ฌ์ฉํ๋ฉด ์ค๋ฅ ๋ฐ์ํฉ๋๋ค.
โ ํด๋์ค์์ late ์ฌ์ฉ ์์
class User {
late String name;
void setName() {
name = 'Alice';
}
void printName() {
print(name);
}
}
void main() {
User user = User();
user.setName();
user.printName(); // Alice
}
- ํด๋์ค ๋ด์์ ๋ณ์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธํ์ง๋ง, ์ค์ ๊ฐ์ ํน์ ํจ์์์ ์ค์ ํ๋ ๊ฒฝ์ฐ ์ ์ฉํฉ๋๋ค.
๐ก late ํค์๋๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ
- Flutter์์ UI ์์๊ฐ ๋น๋๋ ํ ๊ฐ์ด ํ ๋น๋ ๊ฒฝ์ฐ
- ๋คํธ์ํฌ ์์ฒญ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ ํ ๋ณ์๋ฅผ ์ค์ ํ ๊ฒฝ์ฐ
- ์ด๊ธฐํ ์์ ์ด ์ค์ํ ๋ (์: ์ฌ์ฉ์ ๋ก๊ทธ์ธ ํ ๊ฐ์ด ์ค์ ๋จ)
โก late๋ฅผ ์ ์ ํ ํ์ฉํ๋ฉด null safety๋ฅผ ์ ์งํ๋ฉด์๋ ๋ณ์๋ฅผ ์ ๋์ ์ผ๋ก ์ด๊ธฐํํ ์ ์์! ๐
Step 5: null safety๋ฅผ ํ์ฉํ ์์ ํ ์ฝ๋ ์์ฑ ๋ณด์ ์ค๋ช
Dart์
null safety ๊ธฐ๋ฅ์ ์ ํ์ฉํ๋ฉด
Flutter UI์์๋
์์ ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
โ ํจ์์์ nullable ๋ณ์๋ฅผ ๋ค๋ฃฐ ๋
String? getUserName() {
return null;
}
void main() {
String userName = getUserName() ?? 'Guest';
print(userName); // Guest
}
- ?? ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ null์ด ๋ฐํ๋๋ฉด ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
โ Flutter UI์์ null safety ํ์ฉ ์์
Widget build(BuildContext context) {
String? title;
return Text(title ?? '๊ธฐ๋ณธ ์ ๋ชฉ'); // title์ด null์ด๋ฉด ๊ธฐ๋ณธ ์ ๋ชฉ ์ถ๋ ฅ
}
- Flutter UI์์๋ nullable ๋ณ์๋ฅผ ์ง์ ์ฌ์ฉํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ํญ์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ํด๋น ์ฝ๋๋ Futter ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ํด๋์ค Flutter ๊ด๋ จ ํจํค์ง๋ฅผ importํ์ง ์์ผ๋ฉด ์ ์์ ์ผ๋ก ์๋ํ์ง ์์ต๋๋ค.
- dart pad์์๋ ์๋ํ์ง ์์ต๋๋ค.
- null safety๊ฐ ์ด๋ฐ ํํ๋ผ๋ ๊ฒ๋ง ์์๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค์.
๐ก null safety๋ฅผ ํ์ฉํ๋ฉด ์ป์ ์ ์๋ ์ฅ์
- ์ฑ์ด ์๊ธฐ์น ์๊ฒ ์ข ๋ฃ๋๋ ์ํฉ์ ์๋ฐฉ
- ์ปดํ์ผ๋ฌ๊ฐ null ๊ด๋ จ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๊ฐ์งํ์ฌ ๋ฒ๊ทธ๋ฅผ ์ค์ผ ์ ์์
- Flutter UI์์ ์์ ์ ์ธ ์ํ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ์ ์์
โก null safety๋ฅผ ์ ๊ทน ํ์ฉํ๋ฉด ์ฝ๋ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋จ! ๐
โ ข. null safety๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ โ
null ์์ ์ฑ์ ๊ณ ๋ คํ ์ฝ๋ ์คํ์ผ
โ
๋ณ์์ ?๋ฅผ ๋ถ์ผ์ง ์ฌ๋ถ๋ฅผ ๋ช
ํํ๊ฒ ํ๋จ
โ
null ๊ฐ์ ๋ค๋ฃฐ ๋๋ ??, ??=, late๋ฅผ ์ ๊ทน ํ์ฉ
โ
null safety๋ฅผ ํ์ฉํ์ฌ ์์ ์ ์ธ Flutter UI ๊ตฌํ
null safety๋ฅผ ์ฌ์ฉํ๋ฉด ์ป์ ์ ์๋ ์ฅ์
โ
null ๊ด๋ จ ์ค๋ฅ ๋ฐฉ์ง → ์ฑ ์ถฉ๋์ ์ต์ํ
โ
Dart์ null safety๋ ์ฑ๋ฅ ์ต์ ํ์๋ ๊ธฐ์ฌ
โ
Flutter ๊ฐ๋ฐ์์ UI ์ํ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง
โก null safety๋ฅผ ์ ๊ทน ํ์ฉํ๋ฉด ์ฝ๋ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋จ! ๐
์ฆ, Dart๋ ๊ธฐ๋ณธ์ ์ผ๋ก
null์ ํ์ฉํ์ง ์์ต๋๋ค.
(non-nullable by default)
nullable ๋ณ์(?),
null ํ์ธ ์ฐ์ฐ์(??, ??=),
late ํค์๋๋ฅผ ํ์ฉํ์ฌ
null ์์ ์ฑ ์ ์งํ ์ ์์ต๋๋ค.
๋ํ
Flutter UI์์ null safety๋ฅผ ํ์ฉํ๋ฉด
์ฑ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ
์ฝ๋์ ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.