노마드코더 플러터 스터디 3기 주간회고 1주

2024년 05월 24일

01주(/10) : 2024-05-20(월) ~ 2024-05-23(목)

💖 핵심 3줄 요약

  • 이번엔 기필코 런칭을!
  • dart, flutter, riverpod 기본 복습.
  • MVVM을 잘 다루고 싶어요.

🎯 이번 주 목표 ( 완료 시 체크 )

  • dart 기본 복습
  • flutter 기본 복습
  • riverpod 기본 복습

👏 칭찬하고 싶은 점

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 객체를 유지한다.
        • 따라서 initState도 한번만 실행된다.
  • Stateful의 Lifecycle
    • 생성
      • 생성자 호출
      • -> initState(), mounted=true
      • -> build()
    • 업데이트
      • setState()
      • -> build()
    • 소멸
      • dispose()
      • -> super.dispose(), mounted=false

🤔 질문

  • MVVM
    • View 하나당 View Model 하나를 만들면, VM가 너무 많아지고 작성이 부담스럽다.
      • 한 파일이 긴 것도 어렵지만, 폴더가 복잡하고 파일이 많은 것도 힘들어요 ㅠㅠ
      • [질문] 공통 비즈니스 로직을 갖는 경우, VM 간에 효과적으로 공유해서 사용하려면 어떻게 하면 좋을까? or 다른 방법은 없을까?

💖 주간 회의와 조별 활동

이번 주 활동

  • 좋은 분들과 기분 좋게 스타트~^^

기억에 남는 것