์ฐธ๊ณ ์ฌ์ดํธ
โ Dart ๊ณต์ ๋ฌธ์ - ๋ณ์
๐ฏ Null safety
ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ค๋ณด๋ฉด ๋ฐํ์์ Null Pointer Exception์ ๋ง๋๋ ๊ฒฝํ์ ํํ๋ค.
๋ฐฐํฌ ์ ํด๋น ์๋ฌ๋ฅผ ์ก์๋ด๋ฉด ์ข์ง๋ง, Dart๋ null์ด ํ๋ก๊ทธ๋จ์์ ๋ํ๋๋ ๊ฒ์ ๋ง๊ณ ์๋ค.
๋๋ถ์ ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ ์๋ฒฝํ ํ๋ก์ ํธ๋ฅผ ํด๋ผ ์ ์๋ค.
๐ฆ ๋ณ์
๋ณ์๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
var name = 'Bob';
name์ด๋ผ๋ ๋ณ์๋ 'Bob'์ด๋ผ๋ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ String ๊ฐ์ฒด์ ๋ ํผ๋ฐ์ค๋ฅผ ํฌํจํ๋ค.
ํ์ ์ถ๋ก ์ ํตํด name์ ํ์ ์ String์ผ๋ก ์ถ๋ก ๋๋ค.
๋ง์ฝ ๊ฐ์ฒด๊ฐ ๋จ์ผ ํ์ ์ผ๋ก ์ ํ๋์ง ์๋๋ค๋ฉด, Object ํ์ ์ผ๋ก ๋ช ์ํ๋ฉด ๋๋ค. (ํ์ํ๋ค๋ฉด dynamic ์ฌ์ฉ).
Object name1 = 'Bob';
String name2 = 'Bob';
ํ์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ๋ช ์ํ์ฌ ์ ์ธํ ์๋ ์๋ค.
๐ถ๐ป Default Value
Nullable ํ์ ์ ๊ฐ์ง๋ ์ด๊ธฐํ๋์ง ์์ ๋ณ์๋ ์ด๊ธฐ๊ฐ์ผ๋ก null์ ๊ฐ์ง ์ ์๋ค.
Dart์ ๋ชจ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ซ์๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์, ์ซ์ ํ์ ์ ๋ณ์๋ ์ฒ์์๋ null ๊ฐ์ ๊ฐ์ง๋ค.
void printMessage() {
print("lineCount is null");
}
void main() {
int? lineCount;
print(lineCount);
// assert ํจ์๋ ๋๋ฒ๊ทธ์ค์๋ง ์ํฅ์ ๋ผ์น๋ฉฐ, ๋ฐฐํฌ๋ ํ๋ก๊ทธ๋จ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
// ์ ์ธ์ assert(condition, optionalFunc); ๊ณผ ๊ฐ์ผ๋ฉฐ,
// ํ์์ ๊ฐ์ง๋ฉฐ, condition ๊ฐ์ด false๋ผ๋ฉด optionalFunc ํจ์๋ฅผ ํธ์ถํ๋ค.
assert(lineCount != null, printMessage());
}
์๋ฌด ๊ฐ๋ ์ ์ธํ์ง ์์ lineCount์ด๊ธฐ์
main()์ ํธ์ถํ๋ฉด null๊ฐ์ด ์ถ๋ ฅ๋๋ฉฐ,
assert() ํจ์๋ก ์ธํด, printMessage()๊ฐ ํธ์ถ๋๋ฉฐ, ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
null
lineCount is null
Unhandled exception:
'file:///Users/maseunghyun/Desktop/study_dart/main.dart': Failed assertion: line 10 pos 10: 'lineCount != null': is not true.
null์ ์์ ์ฑ์ ํ์ฑํ ํ๋ค๋ฉด, non-nullable ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๊ฐ๋ค์ ์ด๊ธฐํํด์ผ๋ง ํ๋ค.
void main() {
int lineCount = 0;
}
์ง์ญ ๋ณ์๋ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ ํ ํ์๋ ์์ง๋ง, ์ฌ์ฉํ๊ธฐ ์ ์๋ ๊ฐ์ ํ ๋นํ๊ณ ์ฌ์ฉํ์ฌ์ผํ๋ค.
๐ Late ๋ณ์
late์ ์์์ด๋ 2๊ฐ์ง๊ฐ ์๋ค.
- ์ ์ธ ์ ์ด๊ธฐํ ๋๋ non_nullable๋ก ์ ์ธ
- ๋ณ์ ์ด๊ธฐํ๋ฅผ ์ง์ฐ
void main() {
// ๋ฐฉ๋ฒ 1.
String? name;
// ๋ฐฉ๋ฒ 2.
late String name;
}
๐๐ปโ๏ธ ๋ฐฉ๋ฒ 1.
Dart๋ ๋ณ์ ์ ์ธ ํ, ํด๋น ๋ณ์์ null ๊ฐ์ด ๋๋ ๊ฒ์ ํ์ฉํ์ง ์๋๋ค.
๊ทธ๋ฌ๋ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด null ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ๋ณ์ ์ ์ธ ์, ํ์ ์ "?"๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด null์ ํ์ฉํ ์ ์๋ค.
๐๐ปโ๏ธ ๋ฐฉ๋ฒ 2.
๋ณ์๊ฐ์ ์ค์ ์ด ์ฌ์ฉ ์ ์ ๋ณด์ฅ๋์ง๋ง Dart๊ฐ ๋์ํ์ง ์๋๋ค๋ฉด, ํด๋น ๋ณ์์ late๋ฅผ ํ์ํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
late๋ก ํ์ํ ๋ณ์๋ฅผ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํ๋ฉด, ๋ณ์๊ฐ ์ฒ์ ์ฌ์ฉ๋ ๋ initialize๊ฐ ์คํ๋๋ค.
์ง์ฐ ์ด๊ธฐํ๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ์ ํจํ๋ค.
- ๋ณ์๊ฐ ๋น์ฅ ํ์ํ์ง ์์ง๋ง, ์ด๊ธฐํ ๋น์ฉ์ด ๋น์ผ ๊ฒฝ์ฐ
- ์ธ์คํด์ค ๋ณ์๋ฅผ ์ด๊ธฐํ์ ์ด๋์ ๋ผ์ด์ ๊ฐ this์ ๋ํ ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ
โ ๏ธ late ๋ณ์์ ์ด๊ธฐํ๋ฅผ ์คํจํ๋ค๋ฉด, ํด๋น ๋ณ์๋ฅผ ์ฌ์ฉํ ๋ ๋ฐํฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๐งฑ final / const
๋ณ์๊ฐ์ ๋ณ๊ฒฝํ ์๊ฐ์ด ์๋ค๋ฉด, var ๋์ final, const๋ฅผ ํ์ ์์ ์ถ๊ฐํ๋ฉด ๋๋ค.
final ๋ณ์๋ ์ค์ง ํ ๋ฒ๋ง ์คํ๋ ์ ์๋ค.
const ๋ณ์๋ ์ปดํ์ผ ํ์ ์์์ด๋ค. (const๋ ๋ด๋ถ์ ์ผ๋ก final์ด๋ค.)
โ ๏ธ ์ธ์คํด์ค ๋ณ์๋ final๋ก ์ค์ ๋ ์ ์์ง๋ง, const๋ ๋ ์ ์๋ค.
final์ ๋ฐํ์์ ์ ํด์ง๋ค.
void main() {
final name = 'SeungHyun';
final String nickname = 'ma.caron_g';
// The final variable 'name' can only be set once;
name = 'Jinwoo';
}
const ํค์๋๋ ์์ ๋ณ์๋ฅผ ์ ์ธํ ๋๋ง ์ฐ์ด๋ ๊ฒ์ด ์๋๋ค. ์์ ๊ฐ์ ๋ง๋๋๋ฐ ์ฌ์ฉํ ์ ์์ ๋ฟ๋ง ์๋๋ผ, ์์ ๊ฐ์ ๋ง๋๋ ์์ฑ์๋ฅผ ์ ์ธํ ์๋ ์๋ค. ๋ชจ๋ ๋ณ์๋ ์์๊ฐ์ ๊ฐ์ง ์ ์๋ค.
const๋ ์ปดํ์ผ์์ ์ ํด์ง๋ค.
void main() {
var array1 = const [];
final array2 = const [];
const array3 = []; // const []์ ๋์ผ.
}
const ๋ณ์์ ๊ฐ ๋ํ final๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ๊ฒฝ๋ ์ ์๋ค.
โ ๏ธ final ๊ฐ์ฒด๋ ์์ ํ ์ ์์ง๋ง, ๊ฐ์ฒด์ ํ๋๋ ์์ ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ฉด์, const ๊ฐ์ฒด์ ๊ฐ์ฒด์ ํ๋๋ ๋ถ๋ณํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝํ ์ ์๋ค.
'Language > Dart' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Dart ] ํจ์์ ๋ํด ์์๋ณด์. (0) | 2024.04.11 |
---|---|
[ Dart ] ๋ด์ฅ ํ์ (Built-in types)์ ๋ํด ์์๋ณด์. (0) | 2024.04.11 |