시리즈

2023 플러터 책 리뷰의 리뷰

20230308
플러터
book
dart
flutter

오늘 소개할 책 2권은 2023년에 나온 따끈따끈한 책들입니다.
왜 리뷰의 리뷰냐고 하면 2권 모두 제가 테스터를 했던 책들이기 때문입니다.
잘 찾아보면 제 리뷰가 책에 들어있습니다.
두 권 모두 장점이 많은 좋은 책이지만 책의 방향성이 다르기 때문에 비교해보는 재미가 있습니다.
개인적인 생각일 뿐, 여러분의 생각과는 다를 수 있습니다. 그러니 사서 읽어보세요.

급하신 분들은 맨 밑의 요약을 보세요.

표지도 깔끔하게 뽑혔다.



최지호(코드팩토리) 님의
Must Have 코드팩토리의 플러터 프로그래밍: Dart & Flutter 입문부터 실전에 유용한 10가지 앱 개발과 광고와 배포까지 (골든래빗(주), ISBN : 9791191905267)

강성윤 님의
Do it! 깡샘의 플러터 & 다트 프로그래밍: 다트 핵심 문법 총정리 + 69개 실습으로 크로스 플랫폼 모바일 만들기! , (이지스퍼블리싱 ㈜, ISBN : 9791163034582)

공통점

최신 다트 문법이 반영되어 있습니다.
다트 문법을 별도 챕터로 설명해줍니다.
개발 환경으로 안드로이드 스튜디오를 사용합니다.
모바일 (Android, iOS) 플랫폼만을 대상으로 합니다.
정가 : 40000원

Must Have 코드팩토리의 플러터 프로그래밍

1월에 나온 책입니다. 저는 안 들어봤지만, 저자님이 플러터 강의로는 유명하신 분입니다. 강의를 그대로 책으로 옮긴 느낌의 책이라, 검증된 강의를 바탕으로 책이 구성되어 있습니다. 
플러터 초보자를 주 타겟으로 쓰여졌습니다. 작은 프로젝트들을 만들어보면서 필요할 때마다 그 개념을 배우는 컨셉입니다. 책 내용을 전부 따라오면 포트폴리오가 자연스럽게 만들어 집니다. 다트 언어도 설명하고 있기 때문에, 다트와 플러터에 대해 아무것도 몰라도 책을 읽는데 무리가 없습니다.
플러터로 개발 중이거나 앞으로 플러터를 사용할 대부분의 현업 개발자 에게도 도움이 될 것입니다. 자주 사용되는 플러그인들 (dio, drift, admob, firebase) 과 보편적으로 사용되는 UI 위젯 들을 쓰고 있기 때문에, 아주 친숙하게 받아들일 수 있고, 내가 필요한 것만 있는 느낌이 듭니다.
다만 정말 프로그래밍을 플러터로 처음 시작하려는 분들 에게는 추천하지 않습니다. 플러터는 최근까지도 다른 개발 프레임워크나 언어에 비해서 접근성이 떨어지는 편이고, 플러터 강의를 듣는 분들은 보통 다른 프로그래밍 경험이 있는 경우가 많습니다. 그러니 이 책도 프로그래밍 경험이 약간은 있는 분들을 대상으로 쓰여진 느낌입니다. 다트의 기본적인 문법들이 60페이지 안에 꽉꽉 눌러담겨져 있는데, 이런 분들이 혼자서 이 책 만으로 이해하기는 어렵습니다.
다트/플러터 전문가 에게는 추천하지 않습니다. 실전성을 중시하다보니 책의 내용이 공식문서나 API 문서처럼 엄밀한 설명이 되어있지는 못하고, 용어나 코드가 다트의 컨벤션을 100% 따라가지는 못합니다. 플러터 공식 유튜브나 플러터 공식 디스코드를 지속적으로 팔로우하고 있다면 가끔 거슬리는 부분이 나오곤 합니다.
그런 분들은 뭔가 목차만 봐도 이미 내용을 다 아는 느낌이 들 수도 있습니다.

must have 517페이지


아쉬운 점은 필요할 때마다 배우다보니 개념들이 많이 빠져있는 느낌이 듭니다. 마치 이게 1권이고 2권이 또 있을 것 같은, 아직 이야기가 남아있는 느낌. 
한 예로, ‘상태 관리’ 라는 단어가 517페이지나 되어서야 나오게 되고 그마저도 Provider만 간단히 다루는 것에 그칩니다. 
이런 식으로 책이 약간 겉도는 느낌이 들 수 있습니다.

Do it! 깡샘의 플러터 & 다트 프로그래밍

2월에 나온 책입니다. 처음 봤을 때 분량에 깜짝 놀랐습니다. 페이지 수도 100페이지 정도 많고, 페이지 크기 자체도 더 큽니다.

역시 초보자(?) 를 대상으로 하고 있습니다.

시작하자마자 다트 문법을 100페이지 정도를 써서 상세하게 다루고 넘어갑니다. 어느 정도 상세하냐면 책 69페이지에 ‘라이브러리 만들기’ 가 나오고 library, part, part of 같은 키워드를 배우게 됩니다. 이런것이 이 책의 특징인데, 모든 개념을 다 담으려고 하다보니, 어떤 주제가 나오면 그 주제에 해당하는 모든 내용을 최대한 다 설명하고 넘어갑니다. ‘상태관리’ 챕터가 되면 Provider, Bloc, GetX 를 쭉 설명하는 식입니다.

이게 이 책의 장점이자 단점이 됩니다.

do it 69페이지


장점으로는 마치 공식 레퍼런스나 API 사전처럼 사용할 수 있습니다. 궁금한 주제가 있으면 그 주제로 가서 설명을 쭉 보면 됩니다. key, 슬리버, navigation 2.0, isolate, 각종 채널들처럼 설명하기 까다로운 주제들도 잘 정리되어 있습니다.

단점은 초보자가 1장부터 읽는다고 생각하면 난이도가 들쑥날쑥하고 자주 안 쓰는 내용도 봐야 한다는 점입니다.

결국 초보자를 대상으로 한 책이지만, 진짜 초보자 가 읽기에는 좋지 않게 되었습니다. 초보자가 보려면 약간의 코칭이 필요합니다.

초보자를 제외한 개발자에게는 레퍼런스 용으로 추천할 수 있습니다. 레퍼런스 용으로 쓰기에는 최고라고 할 수 있습니다.


요약



두 권 다 좋다.

Must have : 플러터 초보자, 대부분의 현업 개발자에게 추천
작은 프로젝트들을 만들어보면서 필요할 때마다 배우는 컨셉
실전적인 프로젝트 위주, 빠른 결과물, 포트폴리오 만들기를 원하는 사람. ‘찍먹’ 최적화. 자극적인 맛

Do it : 기초부터 다지는 걸 좋아하는 사람에게 추천, 레퍼런스 책 구하는 사람
주제가 나오면 그 주제에 해당하는 모든 내용을 다 설명하고 넘어갑니다.
기본서, 이론서, 참고서, 개념정리. 조금 지루함. 슴슴한 맛
개인적인 생각일 뿐, 여러분의 생각과는 다를 수 있습니다. 그러니 사서 읽어보세요.

.

piano (press key Q)

Categories

flutter ( 82 ) dart ( 34 ) android ( 32 ) kotlin ( 11 ) plugin ( 8 ) provider ( 8 ) vim ( 7 ) bloc ( 6 ) iOS ( 6 ) state management ( 6 ) 플러터 ( 6 ) PS ( 5 ) algorithm ( 5 ) architecture ( 5 ) async ( 5 ) getx ( 5 ) java ( 5 ) API ( 4 ) BOJ ( 4 ) class ( 4 ) daily ( 4 ) git ( 4 ) golang ( 4 ) memo ( 4 ) riverpod ( 4 ) state ( 4 ) stream ( 4 ) test ( 4 ) web ( 4 ) widget ( 4 ) windows ( 4 ) HTTP ( 3 ) androidX ( 3 ) app state ( 3 ) context ( 3 ) crash ( 3 ) db ( 3 ) editor ( 3 ) error ( 3 ) extension ( 3 ) github ( 3 ) hive ( 3 ) ide ( 3 ) package ( 3 ) pubspec ( 3 ) python ( 3 ) syntax ( 3 ) vscode ( 3 ) app icon ( 2 ) await ( 2 ) chocolatey ( 2 ) consumer ( 2 ) cp949 ( 2 ) deployment ( 2 ) dev ( 2 ) flavor ( 2 ) gesture ( 2 ) globalkey ( 2 ) go ( 2 ) google ( 2 ) hack ( 2 ) js ( 2 ) json ( 2 ) key ( 2 ) keystore ( 2 ) list ( 2 ) listview ( 2 ) lock ( 2 ) mac ( 2 ) map ( 2 ) navigation ( 2 ) nosql ( 2 ) project ( 2 ) pub ( 2 ) recyclerview ( 2 ) rxdart ( 2 ) sdk ( 2 ) selector ( 2 ) setting ( 2 ) size ( 2 ) soc ( 2 ) synchronized ( 2 ) tdd ( 2 ) tip ( 2 ) version ( 2 ) viewmodel ( 2 ) vundle ( 2 ) webview ( 2 ) xcode ( 2 ) yaml ( 2 ) ( 2 ) 플러터 단점 ( 2 ) 16.0 ( 1 ) 2.0 ( 1 ) 2023 ( 1 ) AATP2 ( 1 ) ChangeNotifierProvider ( 1 ) Example ( 1 ) Guava ( 1 ) ImageReader ( 1 ) Mo's algorithm ( 1 ) OAuth2 ( 1 ) OpenGL ( 1 ) Oreo ( 1 ) ProgressBar ( 1 ) REST API ( 1 ) Trie ( 1 ) activity ( 1 ) adaptive ( 1 ) android P ( 1 ) android context ( 1 ) android11 ( 1 ) apktool2 ( 1 ) app exit ( 1 ) append ( 1 ) appicon ( 1 ) arkit ( 1 ) array ( 1 ) asciidoc ( 1 ) async * ( 1 ) async* ( 1 ) audio ( 1 ) authorization ( 1 ) await for ( 1 ) behaviorsubject ( 1 ) beta ( 1 ) binary ( 1 ) binarysearch ( 1 ) blender ( 1 ) book ( 1 ) bottomsheet ( 1 ) break ( 1 ) broadcast ( 1 ) browser ( 1 ) bubbles ( 1 ) bug ( 1 ) build ( 1 ) buildcontext ( 1 ) buildnumber ( 1 ) bundle ( 1 ) button ( 1 ) bytecode ( 1 ) cache ( 1 ) camera2 ( 1 ) cameramanager ( 1 ) cd ( 1 ) chrome ( 1 ) ci ( 1 ) circle ( 1 ) clean ( 1 ) clean architecture ( 1 ) cli ( 1 ) clip ( 1 ) clipboard ( 1 ) cloud ide ( 1 ) cmdlet ( 1 ) code ( 1 ) coding test ( 1 ) command ( 1 ) comparator ( 1 ) complexity ( 1 ) concurrency ( 1 ) conditional ( 1 ) const ( 1 ) constraint ( 1 ) constraintlayout ( 1 ) controlc ( 1 ) controlv ( 1 ) converter ( 1 ) copy ( 1 ) copy project ( 1 ) coupling ( 1 ) coverage ( 1 ) cp ( 1 ) css ( 1 ) cupertino ( 1 ) cursor ( 1 ) cv ( 1 ) data class ( 1 ) data structure ( 1 ) dataBinding ( 1 ) database ( 1 ) debounce ( 1 ) decompile ( 1 ) delegate ( 1 ) deno ( 1 ) design pattern ( 1 ) development ( 1 ) device ( 1 ) di ( 1 ) dialog ( 1 ) dio ( 1 ) drawable ( 1 ) drug ( 1 ) emmet ( 1 ) encoding ( 1 ) english ( 1 ) entries ( 1 ) environment ( 1 ) equality ( 1 ) equatable ( 1 ) euc-kr ( 1 ) euckr ( 1 ) exit ( 1 ) expand ( 1 ) expanded ( 1 ) export ( 1 ) extension method ( 1 ) facade ( 1 ) fake ( 1 ) field ( 1 ) figma ( 1 ) final ( 1 ) fixed ( 1 ) flutter pub ( 1 ) flutter web ( 1 ) flutter_inappwebview ( 1 ) flutter_test ( 1 ) flutterflow ( 1 ) fold ( 1 ) fonts ( 1 ) form ( 1 ) frame ( 1 ) future ( 1 ) gestureDetector ( 1 ) gestureRecognizer ( 1 ) gesturearena ( 1 ) get-command ( 1 ) get_cli ( 1 ) getbuilder ( 1 ) getx단점 ( 1 ) gitignore ( 1 ) glut ( 1 ) google fonts ( 1 ) gopath ( 1 ) goto ( 1 ) gradient ( 1 ) graphics ( 1 ) gvim ( 1 ) hackaton ( 1 ) hash ( 1 ) hashmap ( 1 ) hot reload ( 1 ) how to ( 1 ) html ( 1 ) i18n ( 1 ) icon ( 1 ) id ( 1 ) impeller ( 1 ) implementation ( 1 ) import ( 1 ) indicator ( 1 ) inkwell ( 1 ) interrupt ( 1 ) intl ( 1 ) introduction ( 1 ) io ( 1 ) isar ( 1 ) iterable ( 1 ) iteration ( 1 ) javascript ( 1 ) julia ( 1 ) juno ( 1 ) jupyter ( 1 ) kakaomap ( 1 ) keytool ( 1 ) korean ( 1 ) kotlin syntax ( 1 ) l10n ( 1 ) lambda ( 1 ) language ( 1 ) layer ( 1 ) layout ( 1 ) lineageOS ( 1 ) localkey ( 1 ) localtoglobal ( 1 ) long list ( 1 ) ls ( 1 ) mac osx ( 1 ) markdown ( 1 ) markup ( 1 ) material ( 1 ) method ( 1 ) microtask ( 1 ) migrate ( 1 ) mintlify ( 1 ) mock ( 1 ) module ( 1 ) monitor ( 1 ) moor ( 1 ) mouse ( 1 ) mouseregion ( 1 ) multiplatform ( 1 ) multiset ( 1 ) multithread ( 1 ) mutable ( 1 ) mvvm ( 1 ) new ( 1 ) node ( 1 ) nodejs ( 1 ) nosuchmethod ( 1 ) null-safety ( 1 ) numberformat ( 1 ) nvim ( 1 ) object ( 1 ) objectbox ( 1 ) objectkey ( 1 ) obx ( 1 ) online ide ( 1 ) operator ( 1 ) orientation ( 1 ) parabeac ( 1 ) parse ( 1 ) paste ( 1 ) path ( 1 ) pattern ( 1 ) pitfall ( 1 ) play store ( 1 ) pod ( 1 ) podfile ( 1 ) pointer ( 1 ) pointers ( 1 ) powershell ( 1 ) private ( 1 ) programming ( 1 ) pull to refresh ( 1 ) puzzle ( 1 ) pycharm ( 1 ) realitykit ( 1 ) recursion ( 1 ) reduce ( 1 ) reference ( 1 ) regex ( 1 ) regular expression ( 1 ) release note ( 1 ) renderbox ( 1 ) renderobject ( 1 ) repl ( 1 ) repository ( 1 ) response ( 1 ) rm ( 1 ) rotue ( 1 ) round ( 1 ) run ( 1 ) scope ( 1 ) scroll ( 1 ) search ( 1 ) server ( 1 ) serverless ( 1 ) service ( 1 ) sharp ( 1 ) singlerepo ( 1 ) singleton ( 1 ) sketch ( 1 ) sliver ( 1 ) sliverlist ( 1 ) snippets ( 1 ) sogae ( 1 ) sorting ( 1 ) source ( 1 ) sparse ( 1 ) sparse array ( 1 ) spec ( 1 ) split ( 1 ) sqflite ( 1 ) sqlite ( 1 ) sqrt decomposition ( 1 ) stateful ( 1 ) statefulwidget ( 1 ) step ( 1 ) stepper ( 1 ) string ( 1 ) stringbuffer ( 1 ) stringbuilder ( 1 ) studio ( 1 ) study ( 1 ) sub-directory ( 1 ) svn ( 1 ) swiftui ( 1 ) swipe to refresh ( 1 ) system_alert_window ( 1 ) system_cache ( 1 ) systemnavigator ( 1 ) tail recursion ( 1 ) tailrec ( 1 ) tap test ( 1 ) text ( 1 ) texteditingcontroller ( 1 ) textfield ( 1 ) texttheme ( 1 ) themedata ( 1 ) then ( 1 ) thread ( 1 ) throttle ( 1 ) time ( 1 ) tool ( 1 ) tools ( 1 ) tooltip ( 1 ) ts ( 1 ) tutorial ( 1 ) typescript ( 1 ) ui ( 1 ) unittest ( 1 ) update ( 1 ) usb ( 1 ) utf8 ( 1 ) ux ( 1 ) valuekey ( 1 ) variable ( 1 ) vector ( 1 ) versioncode ( 1 ) very_good ( 1 ) view ( 1 ) vim plugin ( 1 ) vimrc ( 1 ) virtualenv ( 1 ) wasm ( 1 ) web app ( 1 ) webview_flutter ( 1 ) while ( 1 ) widget tree ( 1 ) window ( 1 ) wsl ( 1 ) yield ( 1 ) 강의 ( 1 ) 개발 ( 1 ) 개발 공부 ( 1 ) 공부법 ( 1 ) 그래픽스 ( 1 ) 꼬리재귀 ( 1 ) 꿀팁 ( 1 ) 데노 ( 1 ) 두줄 ( 1 ) 디노 ( 1 ) 번역 ( 1 ) 블록 ( 1 ) 상태관리 ( 1 ) 실험 ( 1 ) 안드로이드 ( 1 ) 안드로이드프로젝트 ( 1 ) 안드로이드프로젝트복사 ( 1 ) 어이없는 ( 1 ) 조건부 임포트 ( 1 ) 주절주절분노조절실패의식으흐름 ( 1 ) 패키지 ( 1 ) 프로젝트복사 ( 1 ) 플러그인 ( 1 )