๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿฅ– Bread Basics/Flutter13

[Flutter] Riverpod ์ƒํƒœ๊ด€๋ฆฌ:: ๊ตฌ์กฐํ™”๋œ ์ ‘๊ทผ๋ฒ•๊ณผ ํƒ€์ž… ์•ˆ์ „์„ฑ Flutter ์ƒํƒœ๊ด€๋ฆฌ์—์„œ Riverpod์„ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด Riverpod์„ ๊ณต๋ถ€ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.Riverpod์˜ ๊ตฌ์กฐ์  ์ ‘๊ทผRiverpod์€ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋กœ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์š”์†Œ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.1. ์ƒํƒœ ํด๋ž˜์Šค: ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ •์˜class CounterState { int count = 0; CounterState({required this.count});}์ด ์ ‘๊ทผ๋ฒ•์˜ ์žฅ์ ์€ ์ƒํƒœ์˜ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•ด์ง„๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. CounterState๋งŒ ๋ณด๋ฉด ์ด ๊ธฐ๋Šฅ์ด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”์ง€ ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.2. Notifier: ๋กœ์ง๊ณผ ์ƒํƒœ ๋ณ€๊ฒฝclass RiverpodCounterNotifier extends Notifier { // ๋กœ์ง void countUp(.. 2025. 6. 27.
[Flutter] GetX ์ƒํƒœ๊ด€๋ฆฌ: ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€๊ธˆ๊นŒ์ง€ StatefulWidget โ†’ MVVM ChangeNotifier โ†’ Provider ์ˆœ์œผ๋กœ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ๊ณต๋ถ€ํ•ด๋ดค๋Š”๋ฐ์ด๋ฒˆ์—๋Š” GetX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฒฝํ—˜ํ•ด๋ณด๊ณ , ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊ฐ„๋‹จํ•ด์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!์ด์ „ ๋ฐฉ์‹๋“ค์˜ ๊ณตํ†ต๋œ ์•„์‰ฌ์›€Provider๊นŒ์ง€์˜ ํŒจํ„ด๋“ค// ChangeNotifier ๊ธฐ๋ฐ˜ (MVVM, Provider ๊ณตํ†ต)class CounterViewModel extends ChangeNotifier { int count = 0; void countUp() { count = count + 1; notifyListeners(); // ๐Ÿค” ์ด๊ฑธ ๋งค๋ฒˆ ํ˜ธ์ถœํ•ด์•ผ ํ•จ } void countDown() { count = count - 1.. 2025. 6. 27.
[Flutter] Provider ์ƒํƒœ๊ด€๋ฆฌ:: ChangeNotifier๋ฅผ ๋” ์ฒด๊ณ„์ ์œผ๋กœ ์ด์ „ ํฌ์ŠคํŠธ์—์„œ๋Š” MVVM ChangeNotifier ํŒจํ„ด์œผ๋กœ ํ™”๋ฉด๊ณผ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ "ViewModel์„ ์ง์ ‘ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ณ , ListenableBuilder๊ฐ€ ์กฐ๊ธˆ ๋ฒˆ๊ฑฐ๋กญ๋‹ค"๋Š” ์ ์ด ์•ฝ๊ฐ„์˜ ์•„์‰ฌ์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Provider ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„์ž…ํ•ด์„œ ๊ณต๋ถ€ํ•˜๊ณ , ChangeNotifier๋ฅผ ๋” ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!MVVM ChangeNotifier์˜ ์•„์‰ฌ์›€๋“คclass MvvmChangeNotifierHomePage extends StatelessWidget { MvvmChangeNotifierHomePage({super.key}); final viewModel = CounterViewModel(); // ๋งค๋ฒˆ ์ง์ ‘ ์ƒ์„ฑํ•ด์•ผ ํ•จ @ove.. 2025. 6. 27.
[Flutter] MVVM ChangeNotifier:: (ํ™”๋ฉด) / (๋ฐ์ดํ„ฐ, ๋กœ์ง) ๋”ฐ๋กœ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” MVVM ํŒจํ„ด๊ณผ ChangeNotifier๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฑ…์ž„์„ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊น”๋”ํ•ด์ง€๋Š”์ง€ ์ง์ ‘ ํ™•์ธํ•ด๋ณด์„ธ์š”!StatefulWidget์˜ ๋ฌธ์ œ์  ๋˜์งš์–ด๋ณด๊ธฐ// ์ด์ „ ๋ฐฉ์‹: ๋ชจ๋“  ๊ฒƒ์ด ํ•œ ๊ณณ์—class _StateCounterHomePageState extends State { int count = 0; // ๋ฐ์ดํ„ฐ Widget build(BuildContext context) { ... } // ํ™”๋ฉด onPressed: () { // ๋กœ์ง setState(() { count++; }); }}๋ฌธ์ œ์ : ํ™”๋ฉด + ๋ฐ์ดํ„ฐ + ๋กœ์ง์ด ๋ชจ๋‘ ์„ž์—ฌ์žˆ์–ด์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€MVV.. 2025. 6. 27.
[Flutter] StatefulWidget:: ํ™”๋ฉด, ๋ฐ์ดํ„ฐ, ๋กœ์ง์„ ํ•œ ๋ฒˆ์— Flutter ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋จผ์ € ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ StatefulWidget์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์นด์šดํ„ฐ ์•ฑ์„ ๋งŒ๋“ค๋ฉด์„œ "์™œ ์ด๋ ‡๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์„๊นŒ?" ๊ถ๊ธˆํ•ดํ•˜์‹  ์  ์žˆ์œผ์‹ ๊ฐ€์š”? StatefulWidget์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?StatefulWidget์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ์œ„์ ฏ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.// StatefulWidget ํด๋ž˜์Šค ์ž์ฒด๋Š” ๋ถˆ๋ณ€(immutable)!class StateCounterHomePage extends StatefulWidget { const StateCounterHomePage({super.key}); @override State createState() => _StateCounterHomePageS.. 2025. 6. 27.
Dart ์–ธ์–ด ๊ธฐ๋ณธ๊ธฐ ๋ฐฐ์šฐ๊ธฐ https://www.inflearn.com/course/dart-%EC%96%B8%EC%96%B4-%EC%9E%85%EB%AC%B8 [์ง€๊ธˆ ๋ฌด๋ฃŒ][์ฝ”๋“œํŒฉํ† ๋ฆฌ] [์ž…๋ฌธ] Dart ์–ธ์–ด 4์‹œ๊ฐ„๋งŒ์— ์™„์ „์ •๋ณต ๊ฐ•์˜ | ์ฝ”๋“œํŒฉํ† ๋ฆฌ - ์ธํ”„๋Ÿฐ์ฝ”๋“œํŒฉํ† ๋ฆฌ | , ๊ฐœ๋ฐœ์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ๋ชฐ๋ผ๋„ ๊ดœ์ฐฎ์•„์š” ๐Ÿ’โ€โ™€๏ธ๋‚ด ์†์œผ๋กœ ์•ฑ ๋งŒ๋“ค๊ธฐ ์ฒซ๊ฑธ์Œ! Dart ์–ธ์–ด, ์ œ๋Œ€๋กœ ๋ฐฐ์›Œ๋ณด์ž! ๐Ÿ˜Ž [์‚ฌ์ง„] iOS์™€ Android์—์„œ ์•ฑ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” Flutter ํ”„๋ ˆ์ž„์›Œํฌwww.inflearn.com ์ธํ”„๋Ÿฐ์—์„œ flutter์˜ ๊ธฐ๋ณธ dart์–ธ์–ด ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ๋‚ด์šฉ ์œ„์ฃผ๋กœ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋ณ€์ˆ˜ ? ์™€ ! (nullable, non-nullable) Final๊ณผ Const๊ณตํ†ต์ ์ฐจ์ด์ final:- ํ• ๋‹น.. 2025. 4. 28.
mixin, sealed, base ํด๋ž˜์Šค void main() {}// Mixin Class// 1) mixin์€ extended๋‚˜ with์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— mixin class๋„// ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค// 2) ํด๋ž˜์Šค๋Š” on ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— mixin class๋„ on ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.mixin class AnimalMixin { String bar() { return '๋ฉ๋ฉ'; }}class Dog with AnimalMixin{}// sealed ํด๋ž˜์Šค๋Š” abstract์ด๋ฉด์„œ final์ด๋‹ค// ๊ทธ๋ฆฌ๊ณ  ํŒจํ„ด๋งค์นญ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹คsealed class Person3 {}class Idol extends Person3 {}class Engineer extends.. 2025. 4. 25.
Record(ํŠœํ”Œ), Destructuring void main() { final result = nameAndAge({'name': '๋ฏผ์ง€', 'age': 20}); print(result); print(result.$1); print(result.$2); print('---------------'); final result3 = getNewJeansWithType(); for (final item in result3) { print(item.$1); print(item.$2); } print(result3); print('---------------'); final result4 = getNewJeansWithType2(); for (final item in result4) { print(item.name);.. 2025. 4. 25.
Future, async, await, stream, listen, sink, yield void main() async { // Future - ๋ฏธ๋ž˜ // ๋ฏธ๋ž˜์— ๋ฐ›์•„์˜ฌ ๊ฐ’? Future name = Future.value('๋ธŒ๋ž˜๋“œ'); Future number = Future.value(1); Future isTrue = Future.value(true); final result1 = await addNumbers(1, 1); final result2 = await addNumbers(2, 2); print('result1: $result1'); print('result2: $result2'); print('result1 + result2 : ${result1 + result2}');}Future addNumbers(int number1, int number2) asyn.. 2025. 4. 25.
ํ˜•๋ณ€ํ™˜, map, where, reduce/fold, ์ฒด์ด๋‹ ์•„ ์žฌ๋ฐŒ๋‹ค. ์ฝ”๋”ฉ ์žฌ๋ฐŒ๋‹ค~void main() { List blackPink = ['๋กœ์ œ', '์ง€์ˆ˜','๋ฆฌ์‚ฌ', '์ œ๋‹ˆ', '์ œ๋‹ˆ']; print(blackPink); print(blackPink.asMap()); print(blackPink.toSet()); Map blackPinkMap = blackPink.asMap(); print(blackPinkMap.keys); print(blackPinkMap.keys.toList()); print(blackPinkMap.values); print(blackPinkMap.values.toList()); Set blackPinkSet = Set.from(blackPink); print(blackPinkSet.toList());.. 2025. 4. 25.