With AI

Dart๋ž€?

  • -
๋ฐ˜์‘ํ˜•

 

Dart๋Š” Google์—์„œ ๊ฐœ๋ฐœํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์ฃผ๋กœ Flutter ํ”„๋ ˆ์ž„์›Œํฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์›น, ๋ชจ๋ฐ”์ผ, ๋ฐ์Šคํฌํ†ฑ, ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•œ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

  • JIT (Just-In-Time) ์ปดํŒŒ์ผ โ†’ ๊ฐœ๋ฐœ ์ค‘์—๋Š” ๋น ๋ฅธ ์‹คํ–‰ & Hot Reload ๊ฐ€๋Šฅ
  • AOT (Ahead-Of-Time) ์ปดํŒŒ์ผ โ†’ ์•ฑ ๋ฐฐํฌ ์‹œ์—๋Š” ๋น ๋ฅธ ์‹คํ–‰ ์†๋„ ์ œ๊ณต

๐Ÿ“Œ Hot Reload ๋•๋ถ„์— Flutter ์•ฑ ๊ฐœ๋ฐœ ์‹œ UI ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Œ.

  • ํด๋ž˜์Šค(Class) ๋ฐ ์ƒ์†(Inheritance) ์ง€์›
  • Mixin, Abstract Class ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋… ํ™œ์šฉ ๊ฐ€๋Šฅ
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌ๋จ (int, double๋„ ๊ฐ์ฒด)
class Animal { String name; Animal(this.name); void makeSound() { print('$name: ์†Œ๋ฆฌ๋ฅผ ๋‚ธ๋‹ค'); } } class Dog extends Animal { Dog(String name) : super(name); @override void makeSound() { print('$name: ๋ฉ๋ฉ!'); } } void main() { Dog dog = Dog("๋ฐ”๋‘‘์ด"); dog.makeSound(); // ๋ฐ”๋‘‘์ด: ๋ฉ๋ฉ! }

 

Dart๋Š” null ๊ฐ’์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Null Safety๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

String? name; // nullable ๋ณ€์ˆ˜ name = "Dart"; print(name!.length); // null์ด ์•„๋‹˜์„ ๋ณด์žฅํ•  ๋•Œ ! ์‚ฌ์šฉ

 

๐Ÿ“Œ Null Safety ๋•๋ถ„์— ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ.

 

Dart๋Š” async/await, Future, Stream์„ ํ™œ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Future<String> fetchData() async { await Future.delayed(Duration(seconds: 2)); // 2์ดˆ ๋Œ€๊ธฐ return "๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์™„๋ฃŒ!"; } void main() async { print("๋กœ๋”ฉ ์ค‘..."); String data = await fetchData(); print(data); // 2์ดˆ ํ›„ "๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์™„๋ฃŒ!" ์ถœ๋ ฅ }

 

๐Ÿ“Œ Flutter์—์„œ API ํ˜ธ์ถœ, ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ ์‹œ ์œ ์šฉํ•จ.

 

Dart๋Š” List, Set, Map๊ณผ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

void main() { List<String> fruits = ["์‚ฌ๊ณผ", "๋ฐ”๋‚˜๋‚˜", "ํฌ๋„"]; Map<String, int> scores = {"์ฒ ์ˆ˜": 90, "์˜ํฌ": 85}; print(fruits[1]); // ๋ฐ”๋‚˜๋‚˜ print(scores["์ฒ ์ˆ˜"]); // 90 }

 

๐Ÿ“Œ ์ปฌ๋ ‰์…˜ ์กฐ์ž‘์ด ์‰ฝ๊ณ , ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋„ ์ œ๊ณต (where, map, reduce ๋“ฑ).

 

  • Dart๋Š” Flutter์˜ ๊ณต์‹ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
  • Flutter UI ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ง๊ด€์ ์ธ ๋ฌธ๋ฒ• ์ œ๊ณต
  • Hot Reload ๊ธฐ๋Šฅ ๋•๋ถ„์— ์‹ค์‹œ๊ฐ„ UI ๋ฐ˜์˜ ๊ฐ€๋Šฅ
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text("Dart & Flutter")), body: Center(child: Text("Hello, Dart!")), ), ); } }

 

๐Ÿ“Œ Dart๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Flutter๋กœ ๊ฐ•๋ ฅํ•œ UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.

โœ… Flutter ๊ฐœ๋ฐœ ํ•„์ˆ˜ ์–ธ์–ด (iOS & Android ์•ฑ ๋™์‹œ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ)
โœ… ๋น ๋ฅธ ์‹คํ–‰ ์†๋„ (JIT & AOT ์ปดํŒŒ์ผ ์ง€์›)
โœ… ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ• & ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์›
โœ… ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (async/await)์œผ๋กœ ๋„คํŠธ์›Œํฌ ์ž‘์—… ์ตœ์ ํ™”
โœ… ์›น, ๋ชจ๋ฐ”์ผ, ๋ฐ์Šคํฌํ†ฑ, ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ (๋ฉ€ํ‹ฐํ”Œ๋žซํผ ์ง€์›)


โœ” Flutter ์•ฑ ๊ฐœ๋ฐœ (๋ชจ๋ฐ”์ผ, ์›น, ๋ฐ์Šคํฌํ†ฑ)
โœ” ์„œ๋ฒ„ ๊ฐœ๋ฐœ (dart:io, shelf ํŒจํ‚ค์ง€ ํ™œ์šฉ)
โœ” CLI(๋ช…๋ น์ค„) ๋„๊ตฌ ์ œ์ž‘
โœ” ๋จธ์‹ ๋Ÿฌ๋‹ ๋ฐ ๋ฐ์ดํ„ฐ ๋ถ„์„

๋ฐ˜์‘ํ˜•

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.