Flutter란?

구글에서 만든 애플리케이션 프레임워크이다.
사용되는 언어는 구글의 Dart.

특징1. 크로스 플랫폼

하나의 코드로 안드로이드, iOS, Windows, macOS, 리눅스, 웹브라우저, 심지어 Embedded 장치에서도 동작하는 애플리케이션을 만들 수 있다.
2018년까지만 해도 안드로이드와 iOS만을 지원했지만, 계속 발전하여 PC나 웹브라우저에도 적용할 수 있는 프레임워크로 발전했다.

이러한 특징 덕분에 빠르게 프로토타입을 만들어 여러 환경에서 테스트해보고자 하는 개발자의 개발 시간을 줄여준다.

특징2. 개발언어 Dart

Dart는 구글에서만든 멀티 플랫폼 객체 지향 프로그래밍 언어이다.
자바스크립트를 대체 할 수 있다.

특징3. Flutter의 작동 방식

유저의 화면에 캔버스를 렌더링하고 자체 그래픽 엔진을 사용하여 앱의 UI를 그리는 것이다. 이 덕분에 크로스플랫폼이 가능한 것. 어떤 플랫폼에서든 프레임워크가 캔버스를 칠하고 직접 UI를 빌드하는 덕분이다.


장단점

장단점 : 크로스 플랫폼

앞서 기재한대로 하나의 코드로 다양한 플랫폼에서 작동하는 애플리케이션을 만들 수 있다. 그리고 이는 여러 플랫폼에 함께 출시를 원하는 개발자의 시간을 절약해준다.

하지만 결국 크로스 플랫폼 프레임워크이기 때문에 네이티브 프레임워크보다 떨어지는 수준의 제어 기능을 가질 수밖에 없으며, 네이티브 컴포넌트들을 사용하지 못하는 경우가 있다. 기능이 제한된 경우 커뮤니티에서 만든 플러그인으로 대체할 수 있으나, 직접 제공되는 API가 있는 것 보다는 불편할 것이다.

또한 각 플랫폼에 맞춰 Flutter 개발 팀은 각 플랫폼에 맞게 Flutter의 기능과 패키지를 유지보수 해야하는데.. 커버해야하는 플랫폼이 많은 만큼 유지보수가 늦게 될 수 있다는 우려가 있다.

단점 : 앱이 무겁다

Flutter로 만들어진 애플리케이션은 코드와 그래픽엔진 코드가 함께 배포되기 때문에 앱이 무거운 단점이 있다. 이는 Flutter의 작동방식 (캔버스 렌더링 -> 자신의 그래픽 엔진으로 UI 그리기) 때문이다. 덕분에 크로스플랫폼이 가능한 것이지만.

장점 : 커뮤니티가 잘 활성화 됨

커뮤니티 및 Docs가 잘 활성화 되어있고 그 퀄리티가 좋다.(고 함)

단점 : 리액트 등 다른 프레임워크보다 개발자 풀이 작음

리액트의 경우 CSS와 규칙이 거의 동일하므로 기존 프론트 개발자들도 쉽게 접근할 수 있다는 특징이 있다. 그에 비해 Flutter의 기반이 되는 Dart는 Flutter가 출시되기 전에는 거의 쓰이지 않던 언어이며, 기존 프론트 개발자들이 새로 공부해야 한다는 벽이 존재한다.

다행인 점은 Dart가 비교적 배우기 쉬운 언어이며, Java와 비슷하기 때문에 나의 경우엔 접근하기 쉬울 것이라는 것.

장점 : 기본 기능들

Flutter에는 기본 기능으로 탐색, 번역, 다크모드, 테마, 애니메이션, 상태관리와 같은 것을 탑재하고 있으며, 이미 완성된 컴포넌트들도 제공한다는 장점이 있다. 더불어, 공식 Flutter 팀이 직접 관리하는 라우팅, 카메라 제어, 파일 선택, 지도, 웹 뷰, 앱 구매 등의 패키지를 개발해 배포하고 있다.

Flutter 팀의 패키지 배포 사이트 : https://pub.dev

이 장점은 빠르게 개발을 하고 테스트해보아야 하는 프로젝트 등에 더없이 좋은 점이 될 것이다.

단점 : Code Push가 불가능함

Code Push란, 리액트 네이티브로 개발된 애플리케이션을 앱스토어의 심사과정 없이 신속하게 업데이트 할 수 있는 기능이다. 리액트 네이티브 앱은 기본적으로 “자바스크립트 파일을 다운로드 받아 실행시키는” 기능을 하는 것이기 때문에, 개발자는 코드 수정 없이 자바스크립트와 이미지를 교체하는 것만으로도 앱을 업데이트하고 오류를 개선할 수 있는 것이다. 물론 코드에서 발생하는 오류를 수정하거나, 코드 자체의 업데이트를 해야 할 경우에는 앱스토어의 심사과정을 거쳐야 한다.

하지만 Flutter는 애플리케이션을 실제로 실행하는 코드를 네이티브 바이너리로 컴파일하기 때문에, 애플리케이션을 업데이트 하려면 실제로 유저가 실행중인 바이너리를 교체해야 한다. 즉, 앱을 다시 컴파일한 후 앱스토어에 제출해 심사를 다시 받아야 하는 것이다.

장단점 : 객체지향 프로그래밍 언어

Flutter의 바탕 언어인 Dart는 객체지향 프로그래밍 언어이다. 백엔드가 Java로 구축되어있고, 관련 개발자가 객체지향 언어에 익숙하다면 Flutter는 좋은 선택이 될 수 있다.


리뷰

1. 꼭 공부해야 할 프레임워크

하나의 언어와 하나의 프레임워크로 플랫폼에 얽매이지 않고 서비스를 배포할 수 있다는 점은 너무도 매력적이다. Dart와 Flutter 만으로도 큰 무기를 가지게 되는 셈. 5/9 경부터 공부 예정.

공부는 Dart기초 -> Flutter순으로 할 것이다. Dart는 Flutter를 사용하는 기초가 되는 것으로, 시간이 좀 더 들더라도 차근차근 공부해놔야 나중에 오히려 시간을 아낄 것이다.

2. Flutter의 단점에 대해

다른 크로스플랫폼 애플리케이션들 또한 가지고 있는 단점으로 보여진다. 각각의 플랫폼에 꼭 맞는 기능들을 필요로 하는 정말 고도화된 애플리케이션들이 아니라면, 굳이 Flutter를 쓰지 않을 이유가 없다.

3. Flutter는 무조건 좋은가?

여러 장점들이 있고, 꼭 배워놔야 하는 이유도 있다. 하지만 그게 Flutter가 완벽해서는 아니다. SeSAC 교육과정에서, 유튜브나 커뮤니티에서, 그리고 주변 여기저기서 많이 들었던 이야기가 "어떤 언어 혹은 어떤 프레임워크가 가장 좋다!"는 없다는 것이다. 모두 각각 장단점을 가지고 있고, 내가 만들려는 애플리케이션의 특징과 배포되는 환경에 따라 알맞는 언어와 프레임워크를 선택하는 것이 중요하다.


Reference

노마드코더:Flutter를 배워야 하는 이유
노마트코더:Flutter vs 리액트. 승자는?
위키피디아 : Flutter
google developers 블로그의 Flutter 소개글