์ ์ฒด Flutter ๊ฐ์ด๋
์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์ ๋ฆฌ๋ Flutter ๊ฐ๋ฐ ๊ฐ์ด๋
๐ ์์ํ๊ธฐ
Flutter ๊ฐ๋ฐํ๊ฒฝ ์ค์
SDK ์ค์น๋ถํฐ ์ฒซ ์ฑ ์คํ๊น์ง
Flutter SDK ์ค์น, IDE ์ค์ (VS Code/Android Studio), ์๋ฎฌ๋ ์ดํฐ ๊ตฌ์ฑ๊น์ง โ ๊ฐ๋ฐ์ ์์ํ๊ธฐ ์ํ ์๋ฒฝํ ํ๊ฒฝ ์ธํ ๊ฐ์ด๋
Hot Reload & Hot Restart
Flutter ๊ฐ๋ฐ ์๋๋ฅผ 10๋ฐฐ ๋์ด๋ ํต์ฌ ๊ธฐ๋ฅ
์ฝ๋ ์์ ํ 1์ด ์ด๋ด์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ Hot Reload โ Flutter ๊ฐ๋ฐ ์์ฐ์ฑ์ ํต์ฌ์ด์ ๋ค๋ฅธ ํ๋ ์์ํฌ์์ ๊ฐ์ฅ ํฐ ์ฐจ๋ณ์
Flutter ๋ฐฐ์ธ ๋ ์ฐธ๊ณ ํ ๋งํ ์ฌ์ดํธ
ํ์ต์ ๋์์ด ๋๋ ์ธ๋ถ ๋ฆฌ์์ค ๋ชจ์
๐ฏ Dart ์ธ์ด
Dart ์๊ฐ
Google์ด ๋ง๋ ํด๋ผ์ด์ธํธ ์ต์ ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
Dart๋ ๋ชจ๋ ํ๋ซํผ์์ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ์ฑ์ ๋ง๋ค๊ธฐ ์ํด Google์ด ์ค๊ณํ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋๋ค. ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด์ด๊ณ , ๊ฐ๋ ฅํ ํ์ ์์คํ ๊ณผ Null Safety, JIT+AOT ์ปดํ์ผ์ ์ง์ํฉ๋๋ค.
Dart ๊ธฐ๋ณธ ๋ฌธ๋ฒ
๋ณ์ ์ ์ธ, ๋ฌธ์์ด, ์ฐ์ฐ์, Null Safety ๊ธฐ์ด
Dart ํ๋ก๊ทธ๋จ์ main()์์ ์์ํฉ๋๋ค. var/final/const/late/dynamic ๋ณ์ ์ ์ธ, ๋ฌธ์์ด ๋ณด๊ฐ, Null Safety(?/!/??), ์บ์ค์ผ์ด๋(..) ์ฐ์ฐ์ ๋ฑ ํต์ฌ ๋ฌธ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค.
Dart ํ์ ์์คํ
์ ์ ํ์ , ํ์ ์ถ๋ก , ์ ๋ค๋ฆญ, typedef
Dart๋ ์ ์ ํ์ ์ธ์ด๋ก ์ปดํ์ผ ํ์์ ํ์ ์ ๊ฒ์ฌํฉ๋๋ค. ํ์ ์ถ๋ก , is/as ์บ์คํ , ํ์ ํ๋ก๋ชจ์ , ์ ๋ค๋ฆญ, typedef ๋ฑ ํ์ ์์คํ ์ ํต์ฌ์ ๋ค๋ฃน๋๋ค.
Dart ํด๋์ค & OOP
์์ฑ์ 5์ข , ์์, ์ธํฐํ์ด์ค, Mixin, ํฉํ ๋ฆฌ ํจํด
Dart๋ ์์ ํ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋๋ค. 5๊ฐ์ง ์์ฑ์, extends/implements/with๋ฅผ ํ์ฉํ ์์ยท์ธํฐํ์ด์คยทMixin, ํฉํ ๋ฆฌ ํจํด์ผ๋ก ์ ์ฐํ ํด๋์ค ์ค๊ณ๋ฅผ ํ ์ ์์ต๋๋ค.
Dart ์ปฌ๋ ์
List, Set, Map + ์คํ๋ ๋, ์ปฌ๋ ์ for/if
Dart์ 3๋ ์ปฌ๋ ์ โ List(์์O, ์ค๋ณตO), Set(์ค๋ณตX, ์งํฉ ์ฐ์ฐ), Map(ํค-๊ฐ ์). ์คํ๋ ๋ ์ฐ์ฐ์, ์ปฌ๋ ์ for/if, ๋ฉ์๋ ์ฒด์ด๋์ผ๋ก ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
Dart ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
Future, async/await, Stream, FutureBuilder
๋คํธ์ํฌ ์์ฒญ, ํ์ผ I/O ๋ฑ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์ ์์ UI๊ฐ ๋ฉ์ถ์ง ์๋๋ก ์ฒ๋ฆฌํฉ๋๋ค. Future(๋จ์ผ ๊ฒฐ๊ณผ)์ Stream(์ฐ์ ์ด๋ฒคํธ), async/await๋ก ๋น๋๊ธฐ๋ฅผ ๋๊ธฐ์ฒ๋ผ ์์ฑํฉ๋๋ค.
Dart ์์ธ ์ฒ๋ฆฌ
try-catch-finally, on ํ์ ๋ณ ์ฒ๋ฆฌ, rethrow
Dart๋ Exception(๋ณต๊ตฌ ๊ฐ๋ฅ)๊ณผ Error(๋ณต๊ตฌ ๋ถ๊ฐ)๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. try-catch-finally, on ํ์ ๋ณ ์ฒ๋ฆฌ, rethrow, ๋น๋๊ธฐ ์์ธ ์ฒ๋ฆฌ๊น์ง ์ ๋ฆฌํฉ๋๋ค.
Dart Extension
๊ธฐ์กด ํด๋์ค์ ๋ฉ์๋/ํ๋กํผํฐ ์ถ๊ฐํ๊ธฐ
Extension์ ์๋ณธ ์์ค ์์ ์ด๋ ์์ ์์ด ๊ธฐ์กด ํด๋์ค์ ์๋ก์ด ๋ฉ์๋ยทํ๋กํผํฐยท์ฐ์ฐ์๋ฅผ ์ถ๊ฐํฉ๋๋ค. String์ capitalize, int์ isPrime, List์ distinct ๋ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
Dart Records & ํจํด ๋งค์นญ
Dart 3.0 โ ๋ค์ค ๊ฐ ๋ฐํ, ๊ตฌ์กฐ ๋ถํด, switch ํจํด
Dart 3.0์์ ๋์ ๋ Records๋ ํด๋์ค ์์ด ์ฌ๋ฌ ๊ฐ์ ๊ทธ๋ฃนํํ๋ ๋ถ๋ณ ํ์ ์ ๋๋ค. ํจํด ๋งค์นญ๊ณผ ๊ฒฐํฉํ๋ฉด switch/if-case์์ ํ์ ๊ณผ ์กฐ๊ฑด์ ๋์์ ๊ฒ์ฌํ ์ ์์ต๋๋ค.
๐จ ์์ ฏ & UI
์์ ฏ ํธ๋ฆฌ ์ดํดํ๊ธฐ
Flutter UI์ ๊ทผ๋ณธ โ ๋ชจ๋ ๊ฒ์ ์์ ฏ์ด๋ค
Flutter์์ ๋ฒํผ, ํ ์คํธ, ํจ๋ฉ, ์ ๋ ฌ ๋ชจ๋ ์์ ฏ์ ๋๋ค. Widget โ Element โ RenderObject 3๊ฐ์ ํธ๋ฆฌ๊ฐ UI๋ฅผ ๊ตฌ์ฑํ๋ ์๋ฆฌ๋ฅผ ์ดํดํ์ธ์
StatefulWidget vs StatelessWidget
์ํ ์ ๋ฌด์ ๋ฐ๋ฅธ ์์ ฏ ์ ํ ๊ธฐ์ค
๋ณํ์ง ์๋ UI๋ StatelessWidget, ์ฌ์ฉ์ ์ํธ์์ฉ์ผ๋ก ๋ณํ๋ UI๋ StatefulWidget โ ์ฌ๋ฐ๋ฅธ ์ ํ์ด ์ฑ๋ฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค
Flutter ๋ ์ด์์ ์์คํ
Row, Column, Stack, Flex๋ก UI ๋ฐฐ์นํ๊ธฐ
Constraints go down, Sizes go up, Parent sets position โ Flutter ๋ ์ด์์์ 3๋ ๊ท์น์ ์ดํดํ๋ฉด ๋ชจ๋ UI๋ฅผ ์์ ์์ฌ๋ก ๋ฐฐ์นํ ์ ์์ต๋๋ค
๐ ์ํ ๊ด๋ฆฌ
Provider & Riverpod
Flutter ๊ณต์ ์ถ์ฒ ์ํ ๊ด๋ฆฌ ์๋ฃจ์
Provider๋ InheritedWidget์ ๋ํผ๋ก ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ์ ์ ํฉํ๊ณ , Riverpod์ Provider์ ํ์์์ผ๋ก ์ปดํ์ผ ํ์ ์์ ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ์ ๊ณตํฉ๋๋ค
BLoC ํจํด
Business Logic Component๋ก ๊ด์ฌ์ฌ ๋ถ๋ฆฌํ๊ธฐ
Event โ BLoC โ State ๋จ๋ฐฉํฅ ํ๋ฆ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง๊ณผ UI๋ฅผ ์์ ํ ๋ถ๋ฆฌํฉ๋๋ค. ๋๊ท๋ชจ ์ฑ์์ ์ ์ง๋ณด์์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ด ๋ฐ์ด๋ฉ๋๋ค
๐บ๏ธ ๋ค๋น๊ฒ์ด์ & ๋ผ์ฐํ
๋ค๋น๊ฒ์ด์ ๊ธฐ์ด
push/pop๊ณผ Named Routes๋ก ํ๋ฉด ์ด๋ํ๊ธฐ
Navigator.push()/pop()์ผ๋ก ์คํ ๊ธฐ๋ฐ ํ๋ฉด ์ ํ์ ๊ตฌํํ๊ณ , Named Routes๋ก URL ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ์ค์ ํ๋ ๊ธฐ๋ณธ๊ธฐ
GoRouter ์ ์ธ์ ๋ผ์ฐํ
Flutter ๊ณต์ ์ถ์ฒ ๋ผ์ฐํ ํจํค์ง
go_router๋ URL ๊ธฐ๋ฐ ์ ์ธ์ ๋ผ์ฐํ ์ผ๋ก ๋ฅ๋งํฌ, ๋ฆฌ๋ค์ด๋ ํธ, ์ค์ฒฉ ๋ผ์ฐํธ, ๊ฐ๋(์ธ์ฆ ์ฒดํฌ)๋ฅผ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค
๐ฆ ์ค์ & ๋ฐฐํฌ
REST API ์ฐ๋
http/dio๋ก ์๋ฒ์ ๋ฐ์ดํฐ ํต์ ํ๊ธฐ
http ๋๋ dio ํจํค์ง๋ก REST API๋ฅผ ํธ์ถํ๊ณ , JSON ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋ก Dart ๊ฐ์ฒด์ ๋งคํํ๋ ์ค์ ๊ฐ์ด๋
์ฑ์คํ ์ด ๋ฐฐํฌ
iOS App Store + Google Play์ Flutter ์ฑ ์ถ์ํ๊ธฐ
์ฑ ์๋ช , ๋น๋ ์ค์ , ์คํ ์ด ๋ฑ๋ก, ์ฌ์ฌ ๋์๊น์ง โ Flutter ์ฑ์ iOS App Store์ Google Play์ ์ถ์ํ๋ ์ ์ฒด ํ๋ก์ธ์ค
ํ๋ซํผ ์ฑ๋
Flutter์์ ๋ค์ดํฐ๋ธ ์ฝ๋(Swift/Kotlin) ํธ์ถํ๊ธฐ
Flutter์์ ์นด๋ฉ๋ผ, ๋ธ๋ฃจํฌ์ค, NFC ๋ฑ ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ์ด ํ์ํ ๋ MethodChannel์ ํตํด Swift(iOS)/Kotlin(Android) ์ฝ๋์ ํต์ ํ๋ ๋ฐฉ๋ฒ