플러터 정리 _Flutter가 무엇?

정태희·2021년 8월 22일

Flutter 시작하기

목록 보기
1/5
post-thumbnail

1. 크로스플랫폼 프레임워크?

스마트폰은 두 가지 종류로 나누어진다 OS가 Android인가, iOS인가.
두 OS의 추구하는 가치관이 다르고, 디자인이 추구하는 방향 또한 다르다.
때문에 안드로이드는 Java와 Kotlin으로, iOS는 Objective-C, Swift로 개발을 한다.

하지만, 두 가지 OS를 모두 서비스하는 회사의 앱을 보면 디자인과 기능이 대체로 똑같다.

동일한 기능, 동일한 디자인, 동일한 UI를 가진 앱을 개발하는데도 불구하고, OS가 다르기 때문에 다른 언어로 개발을 해야만 하는가?

그래서 나온 것이 크로스 플랫폼 프레임워크이다.

2. 어떤것이 있는가?

모바일 크로스 플랫폼 프레임워크는 크게 세 가지가 있다. 마이크로소프트의 Xamarin, 페이스북의 ReactNative, 구글의 Flutter.

간단하게 비교해보자. (국내에도 자료가 많이 없는 Xamarin 빼고...)

Flutter ReactNative
제작년도 2017 2015
개발사 Google Facebook
현재버전 2.2.3 0.65
언어 Dart JavaScript
생태계 Pub Npm
랜더링 Skia 엔진 JavaScript 브릿지
장점 네이티브에 근접한 성능 JavaScript만으로 개발가능
Meterial, Cupertino 양립 코드푸시
단점 Dart를 배워야함 브릿지의 병목현상
서비스가 종료될수도 있음 OS별 디버깅 필요
생태계가 안정화되지 않음

큰 차이점 세가지를 꼽아보자면,

Flutter는 개발 언어로 Dart를 사용한다.
구글은 C와 Java, Javascript의 장점을 가져와 Dart를 만들었지만, 모바일이나 IoT에서 쓰이지만, 이외의 많은 프레임워크에서 지원하지 않는다는 이유로 2018년 최악의 언어로 선정되었다.
(2020~21년 프로그래밍 언어 점유율 조사에서 20위권에 머물고 있다)

React Native는 개발 언어로 JavaScript를 사용한다.
Angular, React, Vue.js, node.js등 많은 프레임워크에서 사용되며, Java를 사용해본 사람들 중 Javascript를 사용해보지 않은 사람을 찾기 힘들 정도로 점유율 높은 언어이다.
(2020~21년 프로그래밍 언어 점유율 조사에서 10위권에 머물고 있다.)


Flutter는 Pub.dev라는 생태계를 가지고 있다.
Google에서 Flutter 공개 이후 이를 위해 만든 패키지, 라이브러리 생태계이지만, 아직 Flutter가 2017년도에 제작된 만큼 생태계가 성숙하지 못해 많을 자료들을 찾기가 어렵다.

React Native는 Npm이라는 생태계를 가지고 있다.
2010년에 공개된 생태계로 Python, Ruby, Node.js의 패키지라 주로 저장되어 있으며, Node.js의 공개 후 급격하게 성장하여 세계 최대의 생태계가 되었다.

Pub.dev 'stock chart'를 검색하면 5건이 채 안나오지만, Npm에서 검색하면 수십건이 나온다.


Flutter는 렌더링 기술로 Skia Engine을 사용한다.
Skia Engine을 통해 dart코드를 앱의 Canvas위에 '그리는' 방식으로 앱을 구현한다.
Widget 방식을 이용하여 Android, iOS를 막론하고 어느 디자인이든지 사용할 수 있으며, 각각 다른 기기더라도 동일한 페이지를 구현할 수 있으며, 네이티브 언어를 사용한 개발과 크게 성능 차이가 나지 않는다.

React Native는 렌더링 기술로 JavaScript 브릿지를 사용한다.
JavaScript로 이루어진 코드를 브릿지를 통해 실시간으로 컴파일하고, 네이티브 API와 통신하여 앱의 페이지를 구현한다.
네이티브 API에 직접적으로 통신하는 만큼 이를 사용한 기능을 커스텀 하여 사용할 수 있다.

3. 굳이 왜 Flutter를?

3-1. dart를 사용한다는 것이 큰 단점은 아니었다.

Flutter를 사용하기 위해 dart를 배워야 한다는 것을 단점으로 꼽았지만, C와 Java, Javascript의 장점을 가져와 Dart를 만들었기 때문에 문법은 C나 Java와 아주 흡사하다.
나는 주로 Spring을 사용한 웹을 개발했었기 때문에, Java에 대한 기본적인 이해나, 지식이 있었고 굳이 dart언어를 익히기 위해 오랜 시간을 쓰지 않고 Flutter를 사용해 개발을 시작했다.

3-2. Google.

실패한 프로젝트는 과감히 없애버리는 Google이라지만, Android와 iOS의 동시개발에 대한 진입 장벽을 낮추는 프레임워크를 쉽게 포기할 수 없을 것이라고 생각했고, Google에서 개발 중인 차세대 OS인 'Fuchsia'의 개발환경에 Flutter 가 포함될 것이라는 소식이 있을정도로 Flutter를 밀어주고 있기에 Flutter를 선택했다.

3-3. React Native은 OS별 디버깅 필요하다.

React Native는 네이티브 Api와 밀접하게 통신하기 때문에 그 기능을 모두 사용할 수 있다.
특정 컴포넌트를 사용할 때 한쪽의 OS만 지원하는 컴포넌트라면 따로 네이티브 언어로 예외처리를 해줘야 하기 때문에, 디버깅을 할 때에도 OS별로 따로 작업을 진행해줘야 한다.

내가 개발할 앱에는 네이티브 Api의 간단한 기능만이 필요했고, 따로 디버깅을 진행할 시간도, 지식도 없었기에 Flutter를 선택했다.

profile
웹/앱 개발자??

0개의 댓글