
โ . ์๋ก : Dart์์ ๋ณ์ ์ ์ธ ์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ
๐ 1. ๋ณ์ ์ ์ธ ์ ํ์ ์ ์ง์ ํ๋ ๋ฐฉ์
๐ 2. ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ณ์
โ ก. ๋ณธ๋ก : var, dynamic, const, final ์ฐจ์ด์ ๋ถ์
๐ Step 1: var (ํ์ ์ถ๋ก ๋ณ์)์ ํ์ฉ๋ฒ
๐ Step 2: dynamic (๋์ ํ์ ๋ณ์)์ ์ฐจ์ด์
๐ Step 3: const (์ปดํ์ผ ํ์ ์์)์ ํ์ฉ๋ฒ
๐ Step 4: final (๋ฐํ์ ์์)์ ์ฐจ์ด์
๐ Step 5: const vs final ์ฐจ์ด์ ์๋ฒฝ ์ ๋ฆฌ
โ ข. ์ธ์ ์ด๋ค ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
๐ ์ต์ ์ ๋ณ์ ์ ์ธ ๋ฐฉ์ ์ ํํ๊ธฐ
๐ ๋ณ์ ์ ์ธ ์ ์ฃผ์ํ ์
Dart์์
var, dynamic, const, final
์ฐจ์ด์ ์ ๋ฆฌ ๐ฏ๐
Dart์์๋ ๋ณ์๋ฅผ ์ ์ธํ ๋
var, dynamic, const, final
ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ๊ฐ์ ํค์๋๋
๋ณ์์ ํ์ ๊ฒฐ์ ๋ฐฉ์๊ณผ
๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ๊ฐ ๋ค๋ฅด๋ฏ๋ก,
์ ํํ ์ฐจ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋
๊ฐ ํค์๋์ ์ฐจ์ด์ ๊ณผ ์ฌ์ฉ๋ฒ์
์ฝ๋ ์์ ์ ํจ๊ป
์์ธํ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. ๐
๋จผ์
๋ ๋ง์ ์ ๋ณด, ํน์
์์๋๋ก ํฌ์คํ
์ ๋ณด๊ณ ์ถ๋ค๋ฉด
์๋ ๋
ธ์
์ ํ์ธํด์ฃผ์ธ์.

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
โ . ์๋ก : Dart์์ ๋ณ์ ์ ์ธ ์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ ๐ค
ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ณ์๋ฅผ ์ ์ธํ ๋
๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋์ง,
์ด๋ค ๋ฐ์ดํฐ ํ์ ์ ์ ์ฅํ ์ง
๊ณ ๋ คํด์ผ ํฉ๋๋ค.
Dart์์๋ ์ด๋ฅผ ์ํด
var, dynamic, const, final
๋ค ๊ฐ์ง ํจ์๋ฅผ ํ์ฉํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ด๋ค ๊ฒฝ์ฐ์ ์ด๋ค ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น์?
์๋ฅผ ๋ค์ด,
- var์ ์ฌ์ฉํ๋ฉด ํ์ ์ ์๋์ผ๋ก ์ถ๋ก ํ๋ฉด์๋ ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- dynamic์ ์ฌ์ฉํ๋ฉด ๋ณ์์ ํ์ ์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- const๋ ์ปดํ์ผ ์์ ์ ๊ฐ์ด ๊ฒฐ์ ๋๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์์
- final์ ํ ๋ฒ ํ ๋น๋๋ฉด ๋ฐ๊ฟ ์ ์๋ ๊ฐ, ํ์ง๋ง ๋ฐํ์์์ ๊ฒฐ์ ๊ฐ๋ฅ
์ด๋ฒ ํฌ์คํ ์์๋
๊ฐ ํค์๋์ ์ฐจ์ด์ ๊ณผ ์ฌ์ฉ๋ฒ์
์ฝ๋ ์์ ์ ํจ๊ป
์์ธํ ์ ๋ฆฌํ๊ฒ ์ต๋๋ค. ๐
๋ณ์ ์ ์ธ ์ ํ์ ์ ์ง์ ํ๋ ๋ฐฉ์
Dart์์๋ ๋ณ์๋ฅผ ์ ์ธํ ๋
๋ค์ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ ๋ฐฉ์๋ง๋ค
ํ์ ๊ฒฐ์ ๋ฐฉ์๊ณผ
๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ๊ฐ ๋ค๋ฅด๋ฏ๋ก
์ ์ ํ ์ ํ์ด ํ์ํฉ๋๋ค.
โ
๋ช
์์ ํ์
์ง์ → int age = 30;
โ
ํ์
์ถ๋ก (var) → var name = 'Dart';
โ
๋์ ํ์
(dynamic) → dynamic value = 'Hello';
โ
๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ(const, final) → const pi = 3.14;
๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ณ์
๋ณ์๋ ํฌ๊ฒ
๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์(Mutable)์
๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ณ์(Immutable)
๋ก ๋๋ฉ๋๋ค.
โ
๋ณ๊ฒฝ ๊ฐ๋ฅ (Mutable) → var, dynamic
โ
๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ (Immutable) → const, final
โก ๊ฐ์ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค๋ฉด const ๋๋ final์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค! ๐
โ ก. ๋ณธ๋ก : var, dynamic, const, final ์ฐจ์ด์ ๋ถ์ ๐๏ธ
Step 1: var (ํ์ ์ถ๋ก ๋ณ์)์ ํ์ฉ๋ฒ
๐ var์ด๋?
var ํค์๋๋ ๋ณ์๋ฅผ ์ ์ธํ ๋
Dart๊ฐ ์๋์ผ๋ก ํ์ ์
์ถ๋ก ํ๋๋ก ๋์์ค๋๋ค.
ํ ๋ฒ ํ์
์ด ๊ฒฐ์ ๋๋ฉด,
๋ค๋ฅธ ํ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
Dart๊ฐ ์๋์ผ๋ก ์ถ๋ก ํ์ฌ ์ง์ ํด์ฃผ๋,
๋์ฑ ๊ฐํธํ ํ์ ์ถ๋ก ๋ณ์
์ดํด๋ณผ๊น์?

โ
Dart๊ฐ ์๋์ผ๋ก ํ์
์ ์ถ๋ก ํ์ฌ ์ง์
โ
ํ ๋ฒ ํ์
์ด ๊ฒฐ์ ๋๋ฉด ๋ณ๊ฒฝํ ์ ์์ (๊ฐํ์
)
โ
๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ (mutable)
void main() {
var name = 'Flutter'; // Dart๊ฐ ์๋์ผ๋ก String ํ์
์ผ๋ก ์ถ๋ก
print('์ด๋ฆ: $name'); // ์ถ๋ ฅ: Flutter
// name = 42; // โ ์ค๋ฅ ๋ฐ์ (String์ผ๋ก ํ์
์ด ๊ณ ์ ๋์๊ธฐ ๋๋ฌธ)
}
โก ์ ๋ฆฌ:
- var์ ์ด๊ธฐ ๊ฐ์ ๋ฐ๋ผ ํ์ ์ด ๊ฒฐ์ ๋๋ฉฐ, ์ดํ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ํ์ ์ ๋ช ํํ๊ฒ ์๊ณ ์์ ๋ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
- ํ์ ์ด ๋ณํ์ง ์๋ ๊ฒฝ์ฐ var์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ด ๋์์ง๋! ๐ฏ
Step 2: dynamic (๋์ ํ์ ๋ณ์)์ ์ฐจ์ด์
๐ dynamic์ด๋?
dynamic ํค์๋๋
๋ณ์์ ํ์ ์ ์์ ๋กญ๊ฒ
๋ณ๊ฒฝํ ์ ์๋ ๋ณ์์ ๋๋ค.
์ฆ, ํ ๋ฒ ๋ฌธ์์ด์ ์ ์ฅํ๋ค๊ฐ
๋์ค์ ์ซ์๋ก ๋ฐ๊ฟ ์๋ ์์ต๋๋ค.
โ
๋ณ์์ ํ์
์ด ์คํ ์ค์ ๋ณ๊ฒฝ๋ ์ ์์
โ
ํ์
์ด ์๋์ผ๋ก ๊ฒฐ์ ๋์ง ์์ (์ ํํ ํ์
์ฒดํฌ X)
โ
๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ (mutable)
void main() {
dynamic value = 'Hello';
print(value); // ์ถ๋ ฅ: Hello
value = 42; // ํ์
๋ณ๊ฒฝ ๊ฐ๋ฅ
print(value); // ์ถ๋ ฅ: 42
}
โ ์ ๋ฆฌ
- dynamic์ ํ์ ์ด ์ ํํ์ง ์๊ฑฐ๋, ์คํ ์ค ํ์ ์ด ๋ฐ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ํ์ง๋ง, ์๋ชป ์ฌ์ฉํ๋ฉด ์๊ธฐ์น ์์ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ
โก ํ์ ์์ ์ฑ์ด ํ์ํ๋ค๋ฉด var์ ์ฌ์ฉํ๊ณ , ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง dynamic์ ์ฌ์ฉํฉ๋๋ค! ๐จ
Step 3: const (์ปดํ์ผ ํ์ ์์)์ ํ์ฉ๋ฒ
๐ const๋?
const ํค์๋๋
์ปดํ์ผ ํ์์ ๊ฐ์ด ๊ฒฐ์ ๋๋ฉฐ,
์ดํ ๋ณ๊ฒฝํ ์ ์๋ ์์๋ฅผ ์ ์ธํ ๋
์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด,
์์ฃผ์จ(pi)์ฒ๋ผ
๋ณํ์ง ์๋ ๊ฐ์ ์ ํฉํฉ๋๋ค.
โ
๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉ
โ
์ปดํ์ผ ํ์์ ๊ฐ์ด ๊ฒฐ์ ๋์ด์ผ ํจ
โ
๋ฐ๋์ ๊ฐ์ ํ ๋นํด์ผ ํจ (null ๋ถ๊ฐ)
void main() {
const double pi = 3.14; // ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์์
print(pi); // ์ถ๋ ฅ: 3.14
// pi = 3.1415; // โ ์ค๋ฅ ๋ฐ์ (const ๋ณ์๋ ์์ ๋ถ๊ฐ๋ฅ)
}
โ ์ ๋ฆฌ
- const๋ ๋ณ๊ฒฝํ ํ์ ์๋ ๊ฐ(์: ์ํ ์์, ์ฑ ๋ฒ์ ๋ฑ)์ ์ฌ์ฉ
- ์ปดํ์ผ ํ์์ ์ด๋ฏธ ๊ฐ์ด ์ ํด์ ธ ์์ด์ผ ํจ
โก ์ ๋ ๋ณํ์ง ์๋ ์์๋ผ๋ฉด const๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์! ๐
Step 4: final (๋ฐํ์ ์์)์ ์ฐจ์ด์
๐ final์ด๋?
final ํค์๋๋ ํ ๋ฒ ๊ฐ์ ํ ๋นํ๋ฉด
๋ณ๊ฒฝํ ์ ์๋ ๋ณ์์ ๋๋ค.
ํ์ง๋ง
const์ ๋ฌ๋ฆฌ ์ปดํ์ผ ์์ ์ด ์๋๋ผ,
์คํ ์ค(๋ฐํ์)์
๊ฐ์ด ๊ฒฐ์ ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด,
ํ์ฌ ๋ ์ง๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ฅผ ๋ง๋ค ๋
final์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ์ง๋ ํ๋ก๊ทธ๋จ ์คํ ์ ๊ฒฐ์ ๋์ง๋ง,
์คํ ์ค ๋ณ๊ฒฝํด์๋ ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
โ
ํ ๋ฒ ๊ฐ์ ํ ๋นํ๋ฉด ๋ณ๊ฒฝํ ์ ์์
โ
ํ์ง๋ง, ์ปดํ์ผ ํ์์ด ์๋ ๋ฐํ์์์ ๊ฐ์ด ๊ฒฐ์ ๋ ์ ์์
โ
ํด๋์ค ๋ด์์ ์์๋ฅผ ์ ์ธํ ๋ ์ ์ฉ
void main() {
final DateTime now = DateTime.now(); // ์คํ ์์ ์์ ๊ฐ์ด ๊ฒฐ์ ๋จ
print(now);
// now = DateTime.utc(2023, 12, 31); // โ ์ค๋ฅ ๋ฐ์ (final ๋ณ์๋ ์ฌํ ๋น ๋ถ๊ฐ)
}
โ ์ ๋ฆฌ
- final์ ๊ฐ์ด ํ ๋ฒ๋ง ์ค์ ๋๋ฉด ๋ณ๊ฒฝ๋์ง ์์
- ์ปดํ์ผ ํ์์ด ์๋ ๋ฐํ์์์ ๊ฐ์ด ์ ํด์ง ์๋ ์์
โก const์ ๋ฌ๋ฆฌ ์คํ ์์ ์์ ๊ฐ์ด ์ ํด์ง๋ ๊ฒฝ์ฐ final์ ์ฌ์ฉ! ๐
Step 5: const vs final ์ฐจ์ด์ ์๋ฒฝ ์ ๋ฆฌ
๐ const์ final์
๋ชจ๋ ๋ณ๊ฒฝํ ์ ์๋ ์์์ด์ง๋ง,
์ธ์ ๊ฐ์ด ๊ฒฐ์ ๋๋์ง์ ๋ฐ๋ผ
์ฌ์ฉ๋ฒ์ด ๋ค๋ฆ ๋๋ค.
์ฐจ์ด์ | const | final |
๊ฐ ๋ณ๊ฒฝ ์ฌ๋ถ | โ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ | โ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ |
๊ฐ ๊ฒฐ์ ์์ | ์ปดํ์ผ ํ์ | ๋ฐํ์ |
ํด๋์ค ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ | โ ์ฌ์ฉ ๊ฐ๋ฅ | โ ์ฌ์ฉ ๊ฐ๋ฅ |
์คํ ์ค ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ | โ ๋ถ๊ฐ๋ฅ | โ ๋ถ๊ฐ๋ฅ |
์ฌ์ฉ ์์ | const pi = 3.14; | final today = DateTime.now(); |
๐ ์์ฝ:
- ์ปดํ์ผ ํ์์ ๊ฐ์ด ํ์ ๋์ด์ผ ํ๋ค๋ฉด → const
- ๋ฐํ์์์ ๊ฐ์ด ๊ฒฐ์ ๋๋ ๊ฒฝ์ฐ → final
โก Flutter UI ์์๋ฅผ ์ต์ ํํ๋ ค๋ฉด const๋ฅผ ์ ๊ทน ํ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค! ๐ฏ
โ ข. ์ธ์ ์ด๋ค ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ? โ
์ด์ ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
Dart์์ ๋ณ์๋ฅผ ์ ์ธํ ๋
์ด๋ค ์ํฉ์์
์ด๋ค ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง
์ดํด๋ณด๊ฒ ์ต๋๋ค.
void main() {
var language = 'Dart'; // ํ์
์๋ ์ง์ (String)
dynamic value = '๋ณ๊ฒฝ ๊ฐ๋ฅ'; // ํ์
๋ณ๊ฒฝ ๊ฐ๋ฅ
const double pi = 3.1415; // ๋ณํ์ง ์๋ ์์
final DateTime today = DateTime.now(); // ๋ฐํ์์ ๊ฒฐ์ ๋๋ ์์
print('๐ก ํ๋ก๊ทธ๋๋ฐ ์ธ์ด: $language');
print('๐ dynamic ๊ฐ: $value');
value = 42; // dynamic์ ํ์
๋ณ๊ฒฝ ๊ฐ๋ฅ
print('๐ dynamic ๊ฐ ๋ณ๊ฒฝ ํ: $value');
print('๐ข ์์ฃผ์จ (const): $pi');
print('๐
์ค๋ ๋ ์ง (final): $today');
}
์ต์ ์ ๋ณ์ ์ ์ธ ๋ฐฉ์ ์ ํํ๊ธฐ
โ
๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ณ์ → var (ํ์
์ด ๋ณํ์ง ์๋ ๊ฒฝ์ฐ)
โ
๋์ ํ์
์ด ํ์ํ ๊ฒฝ์ฐ → dynamic (๊ฐ๋ฅํ ํ ์ฌ์ฉ ์ง์)
โ
์ ๋ ๋ณํ์ง ์๋ ์์ → const (์ปดํ์ผ ํ์ ๊ฒฐ์ )
โ
ํ ๋ฒ๋ง ์ค์ ๋์ง๋ง ์คํ ์ค ๊ฒฐ์ ๋๋ ๊ฐ → final (๋ฐํ์ ๊ฒฐ์ )
๋ณ์ ์ ์ธ ์ ์ฃผ์ํ ์
โ
๋ฌด์กฐ๊ฑด dynamic์ ์ฌ์ฉํ๋ฉด ํ์
์ค๋ฅ๋ฅผ ์ฐพ๊ธฐ ์ด๋ ค์ → var์ ์ ํธ
โ
Flutter UI์์ const๋ฅผ ์ ๊ทน ํ์ฉํ๋ฉด ์ฑ๋ฅ ์ต์ ํ ๊ฐ๋ฅ
โ
์์ ๊ฐ์ ๋ค๋ฃฐ ๋ final๊ณผ const ์ฐจ์ด๋ฅผ ๋ช
ํํ ์ดํดํ๊ณ ์ ํ
์ฆ,
Dart์์ ๋ณ์ ์ ์ธ ์
์ํฉ์ ๋ฐ๋ผ
์ ์ ํ ํค์๋ ์ฌ์ฉํ์ฌ์ผ ํ๊ณ
๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ๋ฐ๋ผ
var, final, const๋ฅผ
์ฌ๋ฐ๋ฅด๊ฒ ํ์ฉํ๋ฉฐ
const๋
์ปดํ์ผ ํ์ ์์,
final์ ๋ฐํ์ ์์๋ผ๋ ๊ฒ์
์์์ต๋๋ค.
