๐Introduction
โญDart ์ปดํ์ผ๋ฌ
Dart๋ ๋ค์ค ์ปดํ์ผ๋ฌ ๋ฐฉ์์ ์ง์ํ๋ค.
๊ฐ๋ฐ ์ค์๋ JIT๋ฅผ ํตํด ์ฝ๋๋ฅผ ์คํํ๊ณ ,
๋ฐฐํฌํ ๋๋ AOT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด์ ๋น๋ํ๋ค.
1๏ธโฃAOT (ahead-of-time)
- ๋ชฉํ CPU ์ํคํ
์ฒ๋ฅผ ์ง์ ํ ํ, ์คํ ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด๋ก ๋ณํ
- ์ฝ๋ ์์ ์์๋ ๋ค์ AOT ๋น๋ ํ์
2๏ธโฃJIT (just-in-time)
- Dart VM ์ฌ์ฉ
- ๊ฐ๋ฐ ์ค ์ฝ๋๊ฐ ์ฆ์ ์ปดํ์ผ๋จ
- ๋น ๋ฅธ ํ
์คํธ์ ํซ ๋ฆฌ๋ก๋์ ํ์ฉ
โญFlutter์ Dart์ ๊ด๊ณ
Flutter์ Dart๋ ๋ชจ๋ ๊ตฌ๊ธ์์ ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์, ์ํธ์ต์ ํ๊ฐ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ค.
Flutter์ ์ฑ๋ฅ๊ณผ ๊ฐ๋ฐ ๊ฒฝํ์ ๋์ด๊ธฐ ์ํด์ Dart๋ฅผ ๋ฐ์ ์ํจ๋ค.
์ค์ ๋ก JIT์ AOT ์ปดํ์ผ ๋ฐฉ์์ Flutter ์ต์ ํ๋ฅผ ์ํด Dart์ ์ถ๊ฐ๋ ๋ํ์ ์ธ ๊ธฐ๋ฅ์ด๋ค.
โญ์ฐธ๊ณ & ์ฐ์ต ์ฌ์ดํธ
- Dart Document
Dart ๊ฐ์
Dart์ ๋ํ ์งฆ์ ์๊ฐ
dart-ko.dev
Dart ๊ณต์ ๋ฌธ์์์ ๋ ์์ธํ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
- DartPad
DartPad
dartpad.dev
์น ๊ธฐ๋ฐ ์จ๋ผ์ธ IDE
๋ณ๋์ ์ค์น ์์ด Dart๋ฅผ ์คํํด๋ณด๊ณ ์ถ๋ค๋ฉด, DartPad์์ ๊ฐ๋จํ ์ฝ๋๋ฅผ ํ
์คํธํด ๋ณผ ์ ์๋ค.
๐Variables
โญHello World
void main() {
// print ํจ์ : ๋ก๊ทธ ์ถ๋ ฅ
print('hello world');
}
C์ฒ๋ผ mainํจ์์์ ์์ํ๊ณ , ์ธ๋ฏธ์ฝ๋ก ์ ์จ์ค์ผํ๋ค.
โญVar
var name = 'jui';
// ์
๋ฐ์ดํธ ๊ฐ๋ฅ
// ๋ณธ๋ ํ์
๊ณผ ์ผ์นํด์ผํจ.
name = 'julie';
์๋์ผ๋ก ํ์ ์ถ๋ก ์ ํด์ฃผ๋ ํค์๋๋ค.
๊ด์ต์ ์ผ๋ก ํจ์๋ ๋ฉ์๋ ๋ด๋ถ์ ์ง์ญ ๋ณ์๋ฅผ ์ ์ธํ ๋ var๋ฅผ ์ฌ์ฉํ๋ค.
class์์ ๋ณ์๋ property๋ฅผ ์ ์ธํ ๋๋ ๋ช ์์ ์ผ๋ก ํ์ ์ ์ ์ธํ๋ค.
โญDynamic
// var ๋ณ์๋ก ์ ์ธํด์ dynamic๋ณ์๋ก ์ฌ์ฉํ ์ ์์
var name;
// dynamic์ผ๋ก ์ ์ธํ ์๋ ์์.
dynamic nickname;
name = "jui";
name = 12;
name = true;
// dynamic์ด๊ธฐ ๋๋ฌธ์ ํ์
์ ํ์ธํด์ค์ผํจ.
if(name is String){
// string์ธ์ง ํ์ธํ๊ธฐ ๋๋ฌธ์ string ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์์.
print(name.length);
}
// ์ฌ๊ธฐ์๋ string ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์์.
์ฌ๋ฌ๊ฐ์ง ํ์ ์ ๊ฐ์ง ์ ์๋ ๋ณ์์ ์ฐ๋ ํ์ ์ด๋ค.
์ ์ธํ ๋ ๋ณ์ ํ์ ์ ์ ํ์ง ์๊ณ , ์ถํ์ ํ์ ์ ์ ํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฑด ํผํด์ผํ์ง๋ง, ๋ณ์๊ฐ ์ด๋ค ํ์ ์ผ์ง ์๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ ๋ฑ ํ์ํ ๊ฒฝ์ฐ์๋ ๋งค์ฐ ํจ๊ณผ์ ์ด๋ค.
โญNullable
String name = 'jui';
// null safety
// null์ ๋์
ํ ๊ฒฝ์ฐ ์๋ฌ๋จ
//name = null;
// nullable
// null์ด ๋ ์ ์์
String? nickname = 'jui';
nickname = null;
// ์ฌ๊ธฐ์๋ string ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์์
// null ์ฌ๋ถ๋ฅผ ๋ชจ๋ฅด๊ธฐ๋๋ฌธ์ ์๋ฌ๋จ
// nickname.isNotEmpty;
// null์ธ์ง ํ์ธ
if(nickname != null){
nickname.isNotEmpty;
}
// ๋จ์ถ ๋ฌธ๋ฒ
// ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธํ ํ ์ฐ์ฐ ์งํ
nickname?.isNotEmpty;
null safety๋ NullPointerException ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด null ๊ฐ์ ์ฐธ์กฐํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ณ์๋ non-nullable์ด๋ค.
nullable ๋ณ์๋ ๋ช ์์ ํ์ ๋ค์ [?]๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ๋ค.
๋ช ์์ ๋ณ์์ ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด null ์ฌ๋ถ ํ์ธ ํ ์ฌ์ฉํด์ผํ๋ค.ํ์ธํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค.
- if ๋ฌธ ์ฌ์ฉ
- null ์์ ์ฐ์ฐ์ ์ฌ์ฉ : [?.]
โญFinal
// ํ์
์ถ๋ก ๊ฐ๋ฅ
final name = 'jui';
// ํ์
์ ์ง์ ํด์ค๋ ๋จ
final String nickname = 'julie';
// ์์ ๋ถ๊ฐ. ์๋ฌ๋จ.
// name = 'julie';
final ๋ณ์๋ ์์ ๋ถ๊ฐํ ์์์ด๋ค.
javascript์ const์ ๋น์ทํ๋ค.
โญLate
// ๋ณ์ ํ์
์์ ๋ถ์ฌ์ ์ฌ์ฉ
late final name;
late var nickname;
// ์ง์ฐ ์ด๊ธฐํ
name = 'jui';
late ๋ณ์๋ ์ง์ฐ ์ด๊ธฐํ(Lazy Initialization)๋ฅผ ์ง์ํ๋ค.
๋ณ์๋ฅผ ์ ์ธํ ๋ ์ด๊ธฐ๊ฐ์ ํ ๋นํ์ง ์๊ณ , ๋์ค์ ์ด๊ธฐํํ๋ ๊ฒ์ด๋ค.
โญConstant
// ํ์
์ถ๋ก ๊ฐ๋ฅ
const name = 'jui';
const String nickname = 'julie';
// ์์ ๋ถ๊ฐ
// name = 'julie';
const๋ compile-time constant์ด๋ค.
ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ ์ ๊ฐ์ด ํ์ ๋๋ ์์์ด๋ค.
๋ฐํ์ ์ค์๋ ์ ๋ ๋ฐ๋์ง ์๊ณ , ์ปดํ์ผ ์์ ์ ๊ฐ์ด ๊ฒฐ์ ๋์ด ์์ด์ผํ๋ค.
final time = DateTime.now();
ํ๋ก๊ทธ๋จ ์คํ ์์ ์ ๊ฐ์ ๊ฒฐ์ ํ๊ณ ์ถ๋ค๋ฉด, runtime constant์ธ final์ ์จ์ผํ๋ค.
'๐ฑFlutter > Dart' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Dart 3์ผ์ฐจ : ํจ์ (0) | 2025.08.30 |
---|---|
Dart 2์ผ์ฐจ : ๋ฐ์ดํฐ ํ์ (0) | 2025.08.29 |