programming코딩

리얼 Flutter #1 Flutter 핵심 들여다보기

Flutter 핵심 빨리 알아보고 갈께요.

관련된 글이 워낙 많고 다 대동소이한 내용일것입니다.

그래서 스킵할까도 했지만 또 안 짚고 넘어가면 아쉬울것 같아 간단히 적어봤습니다.

Flutter로 앱 만드는데에는 딱히 필요없지만 분명 Flutter로 앱 만든다고 하면 Cordova나 React Native등에 대해서 이야기 하게 될테니까요.

Cross Platform

Flutter 핵심

Flutter homepage 대문에 있는 정의입니다.

Mobile, Web, Desktop 다 된다고 되어 있는데 Web이나 Desktop은 아직 stable version은 없는것 같습니다만 일단 Android와 iOS가 되는게 핵심입니다.

기존 Mobile Cross Platform과 다른점

Hybrid WebNative
Cordova, ionicReact Native, Xamarin
WebViewConverted Native
HTML, Javascript, CSS…Javascript, C#
서버와 주고받아야 하는 요소가 많아 Native보다는 느리고 Animation이나 화면 전화 효과 표현은 어려움Bridge를 통해서 Converting해야 하는 이유로 Native보다는 느림

자 그럼 Flutter는 뭐가 다를까요?

가장 큰 차이점은 UI부분을 보시면

Platform은 Canvas만 제공하고 App에서 Rendering을 하는데 WebView처럼 Interpreting이 아니라 Compiled Code가 실행된다는 점입니다.

This image has an empty alt attribute; its file name is image-6.png

바로 장단점으로 나누어 보겠습니다.

장점

  • 빠름 AOT(Ahead of Time) Type의 중간언어로 컴파일되어 설치시 Native로 compile하는 방식이기 때문에 Native 수준의 속도. 그리고 UI를 그리기 위한 최적화된 Graphic library가 컴파일할때 앱에 포함된다. 또한 Young Space Scavenger Garbage Collection이라는 방식을 사용하여 Garbage collection에서 성능을 높혔다.
Young Space Scavenger Garbage Collection
  • 반응형 UI – 아무래도 WebView보다는 편할것 같다. (Hybrid Web을 안해봐서 정확히는 모르겠습니다만)
  • 유연한 UI 구성요소 – 모든게 Widget이다 React Native의 경우 링크와 같이 UI 구성요소들이 library로 제공된다. 하지만 Flutter는 Canvas만 제공되고 UI 구성요소는 모두 Widget이다. Flutter에서 제공하는 기본 Widget들이 있지만 다른거 만들어 써도 된다.
  • 활성화된 Open Library Community – 다른 Platform들은 안써봐서 잘 모르는 점을 먼저 말씀드리며 flutter는 pub.dev 에서 다양한 library들을 찾아서 사용할 수가 있다. 대부분 Open source이다. 또한 안정성에 대해서는 단점이기도 하다.

단점

  • 큰 Binary Size – Native보다는 커진다. 하지만 다른 Cross Platform들도 같을것 같은데? 그렇게 많이 안커진다 Native가 최초 빌드시 바이너리가 2M수준이면 Flutter는 5M 수준? 하지만 설치하고 나면 커지는 단점은 분명 있다.
  • 안정성 – Library들의 안정성이 떨어지는 경우가 있다. Google이 주요 library들을 제공하고 있긴 하지만 그래도 다른 library들을 많이 사용하게 되는데 별점 시스템이 있어 나름 가려낼 수는 있지만 그래도 완벽하지는 않는것 같다. OS 업그레이드되면 Platform과 연관된 library들은 아무래도 일일히 점검할 필요가 있을것 같다. Test를 어떻게 하지?
  • Mobile외 Platform외에는 아직 미흡 – Web, Desktop이 가능하지만 아직 stable version이 아니다. 아직 web은 beta, desktop은 dev branch이다.
  • 새로운 언어 – 기존의 Cross Platform들은 기존 개발자들을 쉽게 흡수할 수 있는 언어를 선택했다. 하지만 Dart는 새로운 언어이다. 러닝 커브가 생긴다. 그래서 기회일 수도 있다. 아직은 블루 오션일 수 있다.

Hot reload는 장점이라고 밀지만 설치할 때 시간이 오래 걸리는건 단점이니 Hot reload라도 했어야하는 불가피한거였을것 같습니다.

결론

저는 Flutter가 기존의 Cross Platform들의 가려운 부분들을 Dart라는 새로운 언어를 들고 나옴으로써 해결하였다고 평가합니다.

개인적으로는 기존의 Cross Platform들을 경험하지 않은 상태에서 어차피 새로 배워야 하는 입장이니 Dart에 대한 거부감은 없었습니다만 JavaScript나 CSS등에 익숙한 개발자들은 굳이 새로운걸 배워야 하는 점이 클 수 있다고 생각합니다.

안정성과 Platform library의 부족은 시간이 지나면서 해결되겠지만 하나의 주체가 발행해주는 library보다는 관리의 산만함이 있을것 같습니다. 아직 깊게 고민해보지는 않았지만 library들에 대한 Test를 어떻게 보장할 수 있을지 궁금합니다. 이 부분은 제가 좀 더 해보고 나중에 다시 정리하겠습니다.

Native 특성상 UI 변경사항에 대해서도 App Update를 해야 하는 건 Web App에 비하면 단점일수도 있지만 어차피 Native App들과 동일한 상황이니 이를 감안하는 대신 좀 더 고퀄의 UI를 제공한다면 Flutter가 나쁘지 않습니다만 고퀄의 UI를 제공해야만 빛을 낼 수 있는 부담감도 함께 있을것 같습니다.

그리고 개인적으로 개발 퍼포먼스를 위해서 반응형 Programming은 정말 중요하게 생각하는데 이러한 부분에 대해서 충분히 장점이 있습니다.

자 그럼 Chapter2부터는 바로 리얼 Flutter 코딩으로 들어갑니다.

Leave a Reply