01주(/10) : 2024-05-20(월) ~ 2024-05-23(목)
💖 핵심 3줄 요약
- 이번엔 기필코 런칭을!
- dart, flutter, riverpod 기본 복습.
- MVVM을 잘 다루고 싶어요.
🎯 이번 주 목표 ( 완료 시 체크 )
👏 칭찬하고 싶은 점
riverpod 공식 문서 한글
Riverpod 공식 문서 한글판 있어 대략적으로 훑어 보았습니다.
처음에는 니꼬 샘이 알려주신게 Outdated 된건가? 했는데, notifier 부분까지 가니 최신이더라고요.
2기 때 사용법을 아는데 집중했다면, 이번 3기에서는 왜 그런지, 난 어떻게 쓸건지를 생각해 볼 수 있을 것 같습니다.
riverpod_lint
, custom_lint
를 우선 적용하고, code generator 나 hooks 는, riverpod 이 익숙해 지면 사용해 보려고 합니다.
😭 고치거나 버려야 할 점
Flutter 시작하니, 프로젝트 만들고 직접 이것저것 해보는게 다시 주저주저 하게 되네요.
먼가 심리적 허들이;;
다시 편하게 프로젝트 만들고 손가락 움직이는 습관을 들여야겠습니다.
✍️ 이번 주 배운 내용
🤩 새롭게 알게 된 것
- Dart 예외 처리
- 예외 발생시, catch 하지 않으면, 호출 스택을 따라 올라가며 전파된다.
- catch 하기만 하고, 적절히 처리하지 않아도, 프로그램이 종료되지는 않는다.
- main > fn A > fn B > fn C
- C에서 예외 발생시
- main 에서만 catch (e, s) 하면, s 즉 호출 스택을 통해, 예외 발원지를 알 수 있다.
- B, C 여러 군데에서 예외 발생시
- dart 는 단일 스레드에서 발생시 즉시 처리되어야 한다.
- 따라서, 동시에 발생하지는 않고, 먼저와 나중이 있다.
- Specific 한 처리는 발생지에서, 나머지는 위로 rethrow 하라.
- 예외를 끌어올려 중앙에서 관리하면 코드를 유지보수하기 좋다.
- Flutter 위젯
- Row, Column
- 주축( main-axis) 방향으로 ( 공간이 남을시 ) 최대한 커진다.
- 넘치면, 스크롤이 필요하다. ( SingleChildScrollView, ListView 등 )
- 공간이 남을 때, Flexible, Expanded 등을 사용하여 남는 공간을 배분할 수 있다.
- 부축( cross-axis )의 크기는, children 중 가장 큰 것에 맞춰진다.
- children 은 각자의 컨텐츠 만큼 크기를 갖는다.
- InstrincicHeight/Width 를 사용하면, children의 크기가, 가장 큰 것에 맞춰진다.
- UI 코드 분리: method vs widget
- method
- build 메소드가 있는 클래스 내부에 별도 메소드로 분리
- 작을 때만 사용
- 다른 곳에서 재사용이 어렵고
- 최적화가 안된다. ( 리빌드시 항상 인스턴스가 새로 생성됨 )
- widget
- stateless, stateful 등으로 만드는 것.
- Flutter의 기본 최적화 메커니즘을 활용하려면, 위젯을 사용하자.
- 하나의 위젯에서, FutureBuilder를 복수개 사용하면, 각각의 Future가 완료될 때마다 개별적으로 UI가 빌드된다.
- Flutter 위젯 Build 재실행 로직
- 부모가 리빌드 or 화면이 다시 그려지면
- 새로은 인스턴스가 생성되고, 빌드 함수도 실행된다.
- 단, const로 호출된 Widget은 재사용된다.
- const로 호출하려면, 생성자가 const이고, 전달하는 프로퍼티가 컴파일타임에 고정된 값이어야 한다.
- 생성자가 const 일려면, 모든 프로퍼티가 final 이어야 한다.
- Stateful 위젯은, state 객체를 유지한다.
- Stateful의 Lifecycle
- 생성
- 생성자 호출
- -> initState(), mounted=true
- -> build()
- 업데이트
- 소멸
- dispose()
- -> super.dispose(), mounted=false
🤔 질문
- MVVM
- View 하나당 View Model 하나를 만들면, VM가 너무 많아지고 작성이 부담스럽다.
- 한 파일이 긴 것도 어렵지만, 폴더가 복잡하고 파일이 많은 것도 힘들어요 ㅠㅠ
- [질문] 공통 비즈니스 로직을 갖는 경우, VM 간에 효과적으로 공유해서 사용하려면 어떻게 하면 좋을까? or 다른 방법은 없을까?
💖 주간 회의와 조별 활동
이번 주 활동
기억에 남는 것