일반적인 수준의 사람들


다트 외에 다른 객체 지향 언어를 다루어서, 어느 정도 언어에 대한 지식이 있는 사람들. 즉, 변수, 연산자, 함수 등 언어의 기본적인 개념에 대한 지식이 있는 사람들을 뜻합니다.

자신이 재귀함수를 사용해서 피보나치 수열을 구할 수 있다. 하시는 분은 아래 커리큘럼을 따라주시면 감사하겠습니다.

먼저 1주차, 2주차에 다트 언어에 대해서 다루고, 3주차부터 6주차까지 플러터와 플러터 자체적으로 지원해주는 상태 관리 방법에 대해서 다룹니다. 또, 7주차는 외부 라이브러리를 사용하는 방법에 대해서 다룹니다.

다트 언어를 사용할 때에는 https://dartpad.dev/ 를 사용하고, 플러터를 본격적으로 들어갈 때 부터는 자신의 컴퓨터에 플러터 개발 환경을 구축해야 합니다.

1주차

  1. 데이터 타입
  2. 변수와 연산자
  3. 반복문 및 조건문
  4. 배열(리스트)와 맵
  5. 함수와 클래스, 클래스의 상속

2주차

  1. 인터페이스 (abstract class)
  2. 확장 (Extension)
  3. 제너릭
  4. 콜백 및 고차함수

3주차

  1. 플러터 개발환경 구축
  2. 시작 프로젝트 뜯어보기
  3. 위젯이란?

4주차

  1. 자주 쓰는 위젯 알아보기
  2. 자주 쓰지는 않지만 알아야 하는 위젯 알아보기

→ 참고: https://www.youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG

5주차

  1. 페이지 간 이동 방법, 다른 페이지 만드는 방법 알아보기 (Navigator)
  2. 페이지 간에 데이터 넘겨주는 방법 알아보기
  3. 외부의 리소스 가져오는 방법 알아보기 (보통 이미지나 글꼴, pubspec.yamlassets에 등록.)
  4. 간단한 영화(나 그 외 어떤 것이든) 정보 조회 앱 만들어보기.

6주차

  1. 플러터의 상태란? (StatelessWidget vs StatefulWidget)
  2. 플러터에서는 어떻게 상태 관리를 하는가 (setState())
  3. 간단한 카운터 앱 만들기

7주차

  1. 외부 라이브러리를 현재 프로젝트에 등록하는 방법 알아보기
  2. 외부 라이브러리의 공식 문서를 읽고, 라이브러리 사용하는 방법 알아보기
  3. 비동기가 무엇인지 알아보기 (Future)
  4. shared_preference
  5. http
  6. 플러터에서 어떻게 비동기를 처리할지 알아보기.

8주차

  1. 배운걸 종합해서 프로젝트 하나 하기!

심화일거에요?


사실 심화 하시는 분이 생길거라고 생각은 못 하고 있었어서, 잠시 기억에서 사라져 있었는데 벌써 저 8주차 분량을 끝내셨다니 멋집니다. 👍

위의 내용은 모두 인지하고 계시다 가정하고 커리큘럼을 진행할 예정입니다. 위의 커리큘럼은 어느 정도 플러터 맛보기의 경향이 강했다면, 아래의 내용은 좀 더 플러터라는 프레임워크를 더 깊이 이해하는 것이 주 목적입니다.

따라서 어느 정도 이론을 다룰 예정입니다. 또, 디테일한 배움을 위해 영어 자료가 상당량 들어갈 예정입니다.

사실 아래 내용은 상당히 난이도가 있는 주제들로 선정하였고, 이걸 한 번에 이해하신다면 정말.. 천상 개발자이신 겁니다. 이걸 모두 이해하고 개발하실 수 있다면 플러터로 취업도 가능하지 않을까요.

아무튼, 상태 관리를 끝장내겠다는 마음으로 주제를 선정하고 자료를 모았으니, 아직은 이해가 조금 어렵다라도 정상입니다. 이해는 무슨 맛만 보셔도 정말 대단하신거라 생각해요. (사실 이 쯤되면 주차는 크게 상관이 없을지도 모르겠습니다.)

이번에도 화이팅!

1주차

  1. BuildContext

    아마 플러터로 개발을 하시다보면 새로운 위젯을 만들때마다 BuildContext라는 클래스를 정말 많이 봤을텐데요. 어떤 함수/메서드/위젯에서는 이 클래스의 객체가 필요하다고는 하니 넣어주긴 했는데, 그래서 이게 대체 무슨 역할을 하는지는 모르실 거라 생각해요. 그래서 대체 뭐하는 건지, 어디에 쓸 건지는 살펴보고 넘어가는 게 좋을 거라 생각해서 넣어보았습니다.

    BuildContext?! | Decoding Flutter

    자막 퀄리티가 그렇게 좋지는 않을 거 같아서, 영어 자막으로 보시는 걸 추천드립니다.

    Synchronous BuildContexts | Decoding Flutter

    비동기 함수/메서드 내에서 BuildContext를 사용하는 것이 위험하며, 그렇다면 어떻게 해야할지를 제시합니다.

  2. Key

    플러터의 모든 위젯은 Key를 받을 수 있어요. 물론 직접 만든 위젯에 Key? key라는 매개변수를 생성자에 넣어주지 않으면 받을 수는 없지만, 플러터에서 제공하는 위젯들은 모두 해당 객체를 받을 수 있게 되어 있습니다. 그렇다면 얘는 또 뭘까요?

    When to Use Keys - Flutter Widgets 101 Ep. 4

    영상은 영어지만, 한글 자막이 있어요.

  3. 세 개의 트리

    플러터는 위젯을 어떻게 렌더링할까요? 바로 세 가지의 트리를 사용하는데요. Widget Tree, Element Tree, Render Tree입니다. 해당 부분에 대해서 자세히 설명된 글과 영상이 있어 첨부합니다.

    Flutter architectural overview

    How Flutter renders Widgets

2주차

여기서부터는 상태 관리 라이브러리에 대해서 주로 다룰겁니다. 사실 플러터 외에도 유저에게 닿는 앱/웹을 만들 때는 상태 관리가 거의 제일 높은 난이도를 갖고 있기 때문에, 이에 관련된 라이브러리/패키지/패턴도 많이 나옵니다.

그 중 대표적인 몇 가지를 살펴볼 건데요. 먼저 첫번째로 가장 대표적이라고 할 수 있는 BLoC 패턴입니다.

3주차

그 다음은 Provider 라이브러리입니다. 위의 BLoC 패턴과 마찬가지로 굉장히 많이 사용됩니다.

하지만 이젠 여러 라이브러리가 나왔기 때문에, 각각의 장단점을 살펴보고 자신의 상황에 가장 알맞은 걸 사용하는 게 맞습니다.

+) 시간 나시면 RiverPod 라는 라이브러리도 조사해보시면 좋습니다. Provider 라이브러리를 만든 사람과와 같은 사람이 만들었습니다.

4주차

대망의 GetX 입니다. 앞의 BLoC와 Provider에 비해 굉장히 간단하게 사용할 수 있습니다. 하지만 양날의 검이기 때문에 잘 사용하여야 합니다. 그 이유는, 앞에서 사용했던 라이브러리/패턴들은 모두 BuildContext를 사용하지만 GetX는 사용하지 않습니다.

정확히는 내부적으로 이를 관리하여 적절하게 넣어주는 것이긴 합니다만, 이는 플러터 개발진이 추구하는 방향과는 완전히 반대로 가고 있다는 걸 인지하고 사용하여야 합니다. 이 때문에 엄청난 인기에도 불구하고 Provider는 갖고 있는 Flutter Favorites가 없습니다. 하지만 엄청난 편의성 때문에 많은 사람들이 사용하는 라이브러리이기도 합니다.

물론, 어느 정도 레벨까지는 이 문제를 체감하기 어렵긴 합니다. 관리를 잘 하면 마찬가지로 굉장히 편하게 사용할 수 있는 라이브러리인 건 맞구요. 하지만 너무 무겁다는 평도 많습니다. 하나의 라이브러리에서 엄청나게 많은 기능을 한 번에 지원하고 있기 때문입니다. 이는 단순 GetX에 한정되는 이야기가 아니라, 정말 개발할 때 자신이 사용하는 라이브러리에서 제공하는 모든, 혹은 대부분의 기능을 사용한다고 할 수 있을까? 사용하지 않는다면 너무 낭비가 아닐까?를 한 번 고민해보는 계기가 될 거라 생각합니다.

5주차

대표적으로 세 라이브러리를 살펴보았습니다. 해당 라이브러리를 사용해보고 느낀 장점 및 단점, 그리고 각각의 라이브러리를 언제 사용하면 좋을지 생각해보는 시간을 가져보아요.

6주차

각각의 코드가 알맞은 위치에서 알맞게 역할을 나눠가져서 실행되게 유지하여야 기능을 얹고, 수정하고, 삭제할 때 편해질 수 있습니다. 따라서 알아야 하는 것이 바로 아키텍쳐인데요. 여러 아키텍쳐와, 각각의 상태 관리 패턴/라이브러리에 대한 클린 아키텍쳐에 관한 글을 모아봤습니다.