๐ŸŒฑSeSac Dart ๊ฐ•์˜_7/1~7/3 : ๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ๋ณ€์ˆ˜์™€ Collections, ํ•จ์ˆ˜์™€ Scope

KiKi ManGoยท2026๋…„ 7์›” 23์ผ

SeSac_DartFlutter

๋ชฉ๋ก ๋ณด๊ธฐ
3/18

7/1~7/3 ๋ชจ๋‘ dart์˜ ๊ธฐ๋ณธ์ ์ธ ์šฉ์–ด ๋ฐ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์—… ๋“ค์—ˆ๋‹ค.
์•„์ง ๋ณธ๊ฒฉ์ ์ธ ๋ฌธ๋ฒ• ๋ณด๋‹ค๋Š”, dart ํ”„๋กœ๊ทธ๋ž˜๋ฐ์‹œ ํ•„์š”ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด๋‚˜ ๊ธฐ์ดˆ ๋ฌธ๋ฒ• ๋ชจ๋‘ ๊ฐ€๋ณ๊ฒŒ ์•Œ๋ ค์ฃผ์…จ๋‹ค.
์šฐ๋ฆฌ ๋ฐ˜์—๋Š” ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์—†๋Š” ๊ธฐ์ดˆ์ž(์ฐฝ์—… ํฌ๋ง์ž)๋„ ์žˆ์–ด์„œ ์ž‘์€ ๊ฒƒ๊นŒ์ง€ ์„ฌ์„ธํ•˜๊ฒŒ ์•Œ๋ ค์ฃผ์…จ๋‹ค!

โœ”๏ธํ•™์Šต๋‚ด์šฉ ์š”์•ฝ

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์„ค๋ช…-Command Line Interface(CLI), console, Rainbow Brackets ํ”Œ๋กœ๊ทธ์ธ ์ถ”๊ฐ€, dart project ๋งŒ๋“ค๊ธฐ
  • Dart ๊ธฐ์ดˆ ๋ฌธ๋ฒ• ์†Œ๊ฐœ-Naming Convention(๋„ค์ด๋ฐ ๊ทœ์•ฝ), ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์„ ์ข…๋ฅ˜, Variable(๋ณ€์ˆ˜) ์ข…๋ฅ˜, Nullable/Non-Nullable ์˜๋ฏธ ์„ค๋ช…, ํŠน๋ณ„ํ•œ Variable(var, dynamic, final, const, wild-card) ์„ค๋ช…, Operator(์—ฐ์‚ฐ์ž) ์ข…๋ฅ˜
  • Collections(์ปฌ๋ ‰์…˜: List, Map, Set)
  • ํ•จ์ˆ˜์™€ Scope ์„ค๋ช…-Scope(์œ ํšจ ๋ฒ”์œ„), Closure Functions(ํด๋กœ์ € ํ•จ์ˆ˜), Lexical/Local

1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • CLI(Command Line Interface): ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ
    dart create
    dart run
    dart pub get
  • Console: ํ”„๋กœ๊ทธ๋žจ์˜ ์ž…ยท์ถœ๋ ฅ์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ณต๊ฐ„, log๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์˜์—ญ
    โ†’ ๋””๋ฒ„๊น…์ด๋‚˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ
  • Dart ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
    • Flutter โ†’ ์•ฑ ๊ฐœ๋ฐœ
    • Dart โ†’ ๋ฌธ๋ฒ• ํ•™์Šต ๋ฐ ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ
    • Android Studio์—์„œ : New Flutter Projectโ†’ Dart generatorโ†’ Console Applicationโ†’ project name
  • Rainbow Brackets(๋ ˆ์ธ๋ณด์šฐ ๋ธŒ๋ž˜ํ‚ท): ๊ด„ํ˜ธ((), {}, [])๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ
    • Settingsโ†’ Pluginsโ†’ 'Rainbow Brackets' ๊ฒ€์ƒ‰

2. Dart ๊ธฐ์ดˆ ๋ฌธ๋ฒ•

  • Naming Convention(๋„ค์ด๋ฐ ๊ทœ์•ฝ): ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ผ์ •ํ•œ ๊ทœ์น™์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ
    ๋ณ€์ˆ˜> camelCase
    ํด๋ž˜์Šค> PascalCase
    ์ƒ์ˆ˜> camelCase (const ์‚ฌ์šฉ)

  • ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์„ ์ข…๋ฅ˜

    • ํ•œ ์ค„ ์ฃผ์„ : //
    • ์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„ : /* */
    • ๋ฌธ์„œ ์ฃผ์„ : ///
    • TODO ์ฃผ์„ : // TODO: ํ•ด์•ผ ํ•  ์ž‘์—…
  • Variable(๋ณ€์ˆ˜): ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„

    • int : ์ •์ˆ˜ int age = 20;
    • double : ์‹ค์ˆ˜ double height = 165.5;
    • String : ๋ฌธ์ž์—ด String name = 'KiKi';
    • bool : ์ฐธ ๋˜๋Š” ๊ฑฐ์ง“ bool isLogin = true;

  • Nullable/Non-Nullable: ๋ณ€์ˆ˜์— null์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐœ๋…

    • Non-Nullable: null์„ ์ €์žฅํ•  ์ˆ˜ ์—†๋Š” ๋ณ€์ˆ˜ String name = 'KiKi';
    • Nullable: null์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜, ์ž๋ฃŒํ˜• ๋’ค์— ?๋ฅผ ๋ถ™์ž„ String? nickname;
    • Dart์˜ ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Non-Nullable
  • ํŠน๋ณ„ํ•œ Variable(var, dynamic, final, const, _) ์„ค๋ช… โญ

    • var : ์ €์žฅ๋œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ž๋ฃŒํ˜•์„ ์ž๋™์œผ๋กœ ๊ฒฐ์ •
    • dynamic : ์‹คํ–‰ ์ค‘์— ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์˜ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • final : ๊ฐ’์„ ํ•œ ๋ฒˆ๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ
    • const : ์ปดํŒŒ์ผ ์ „์— ๊ฐ’์ด ๊ฒฐ์ •๋˜๋Š” ์ƒ์ˆ˜
    • _ : ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” Wildcard
    • final๊ณผ const๋Š” ๋ชจ๋‘ ๊ฐ’์„ ๋‹ค์‹œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์ง€๋งŒ, const๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „์— ๊ฐ’์ด ์ •ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•จ.
  • Operator(์—ฐ์‚ฐ์ž) ์ข…๋ฅ˜

    • ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž : +, -, *, /, %, ~/
    • ์ฆ๊ฐ์—ฐ์‚ฐ์ž : ++, --
    • ๋…ผ๋ฆฌ ๋ฐ ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž : &&, ||, !, <=, >=, ==, !=

3. Collections:

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

(1) List

  • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ
  • ์ค‘๋ณต ์ €์žฅ ๊ฐ€๋Šฅ
    • List.length : ํ•ด๋‹น List์˜ ๊ธธ์ด(๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค + 1)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
    • List.first : ํ•ด๋‹น List์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
    • List.last : ํ•ด๋‹น List์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
    • List.add(data) : ํ•ด๋‹น List์˜ ์ธ๋ฑ์Šค ๋์— data๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค
    • List.clear() : ํ•ด๋‹น List์˜ ์ž๋ฃŒ๋“ค์„ ๋ชจ๋‘ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค
    • List.isEmpty : ํ•ด๋‹น List๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
    • List.contains(์ž๋ฃŒ) : ํ•ด๋‹น List์— ์ž๋ฃŒ๊ฐ€ ์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค

(2) Map

  • Key์™€ Value๋ฅผ ํ•œ ์Œ์œผ๋กœ ์ €์žฅ
  • Key๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†์Œ
    • length: Map์˜ ํ‚ค-๊ฐ’ ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. โ†’ ๋ฐ˜ํ™˜: int
    • isEmpty: Map์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. โ†’ ๋ฐ˜ํ™˜: bool
    • isNotEmpty: Map์ด ๋น„์–ด์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. โ†’ ๋ฐ˜ํ™˜: bool
    • keys: Map์˜ ๋ชจ๋“  ํ‚ค๋ฅผ Iterable ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. โ†’ ๋ฐ˜ํ™˜: Iterable
    • values: Map์˜ ๋ชจ๋“  ๊ฐ’์„ Iterable ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. โ†’ ๋ฐ˜ํ™˜: Iterable
    • entries: Map์˜ ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ(Entry)์„ Iterable ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. โ†’ ๋ฐ˜ํ™˜: Iterable<MapEntry<K,V>>

(3) Set

  • ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†์Œ
  • ์ˆœ์„œ๋Š” ํฌ๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์Œ
    • add() : ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์žˆ๋Š” ์š”์†Œ๋ฉด ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • addAll() : ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • remove() : ํŠน์ • ์š”์†Œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    • contains() : ํŠน์ • ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • length : ์ €์žฅ๋œ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • isEmpty : Set์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • isNotEmpty : Set์— ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • union() : ๋‘ Set์˜ ํ•ฉ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • intersection() : ๋‘ Set์˜ ๊ต์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • difference() : ๋‘ Set์˜ ์ฐจ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • toList() : Set์„ List๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

4. ํ•จ์ˆ˜์™€ Scope

  • Scope(์œ ํšจ ๋ฒ”์œ„) : ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„
  • Local Scope : ํ•จ์ˆ˜๋‚˜ ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ์˜์—ญ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Lexical Scope : ํ•จ์ˆ˜๋Š” ์ž์‹ ์ด ์„ ์–ธ๋œ ์œ„์น˜์˜ Scope๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ธ๋ถ€ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
  • Closure Function : ์ž์‹ ์ด ์„ ์–ธ๋œ Scope์˜ ๋ณ€์ˆ˜๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
    โ†’ ์ถ”ํ›„ ๋‹ค์‹œ ์ •๋ฆฌํ•  ์˜ˆ์ •

โœ”๏ธ์‹ค์Šต์—์„œ ํ•„์š”ํ•œ ๋‚ด์šฉ ์ •๋ฆฌ

void main() {
  // ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›์Œ
  stdout.write('Enter your name: ');
  String? name = stdin.readLineSync();
}

๐Ÿ“์ˆ˜์—… ํ›„๊ธฐ

  • ์„ ์ƒ๋‹˜์ด ์—„์ฒญ ์„ฌ์„ธํ•˜๋‹ค๊ณ  ๋А๊ผˆ๋‹ค. ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์กฐ๊ธˆ์ด๋ผ๋„ ์žˆ๋‹ค๋ฉด ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…๋“ค์„ ํ•˜๋‚˜์”ฉ ์„ค๋ช…ํ•ด์ฃผ์…จ๋‹ค.
    ๊ทธ๋ž˜์„œ ์ข€ ํŽธ์•ˆํ•˜๊ฒŒ ์ˆ˜์—… ๋“ค์—ˆ๋‹ค.
  • Collections ๋ถ€๋ถ„์€ ์•Œ๊ณ ๋Š” ์žˆ๋Š”๋ฐ Python์ด๋ž‘ ๋น„์Šทํ•œ๋ฐ, ๋‚ด๊ฐ€ ๊นŠ๊ฒŒ ํŒŒ๊ณ  ์‹ถ์€ ๊ฐœ๋…์ด๋ผ ์žฌ๋ฐŒ์—ˆ๋‹ค.
  • ํ•จ์ˆ˜์™€ Scope ์„ค๋ช…ํ•ด์ฃผ์…จ๋Š”๋ฐ, dart์—์„œ๋Š” ์Šค์ฝ”ํ”„ ๊ฐœ๋…์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•ด์„œ Javascript ๊ณต๋ถ€ํ•  ๋•Œ๊ฐ€ ์ƒ๊ฐ๋‚ฌ๋‹ค.
  • ๋ธ”๋กœ๊ทธ์—๋Š” ์ ์ง€ ์•Š์•˜์ง€๋งŒ ๋™์ ์–ธ์–ด์™€ ์ •์ ์–ธ์–ด ์ •๋ฆฌ๋ฅผ ํ•ด์คฌ๋Š”๋ฐ ํ•™์ ์€ํ–‰์ œ ๊ณต๋ถ€ํ•  ๋•Œ ๋‚˜์™”๋˜ ๊ฐœ๋…์ด๋ผ ๋ฐ˜๊ฐ‘๊ณ , ์ข‹์•˜๋‹ค.
profile
๐Ÿฅญ ํญ๋„“์€ ๊ฒฝํ—˜์„ ์”จ์•— ์‚ผ์•„, ๊นŠ์ด๋ฅผ ๋‹ค์ง€๋ฉฐ ์ง€๊ธˆ ์ต์–ด๊ฐ€๋Š” ์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€