Flutter란?

JJUDEV·2022년 11월 14일
1

flutter

목록 보기
2/2
post-thumbnail

1. 플러터(Flutter)란

플러터는 구글에서 만들어 오픈 소스로 공개한 모바일 앱 개발 프레임워크입니다. 자체적으로 UI를 렌더링하고, 기본 설정인 Material Design과 Cupertino 패키지를 제공하기 때문에 Android의 Material 디자인과 iOS의 Cupertino 디자인 또한 구현 가능합니다. (반대로도 가능합니다.)

2. 다트(Dart)란

플러터는 Dart(다트) 언어를 사용합니다. 다트는 구글이 만든 언어이고, 구글이 지속적으로 유지 보수를 한다는 장점이 있는데 단순히 그래서 다트를 사용하는 건 아니라고 합니다.

  • 다트는 JIT 컴파일(just-in-time compilation)과 AOT 컴파일(ahead-of-time compliation)을 모두 지원합니다.
  • 다트의 선택형 JIT 컴파일러는 핫 리로드(hot reload)를 지원하여 빠른 개발 속도를 누릴 수 있습니다.

    • JIT 컴파일: 런타임 전이 아니라 필요할 때 코드를 컴파일하는 것으로, 모든 코드를 처음에 기계어로 변환하지 않고, 해당 메소드나 기능이 호출되는 필요한 시점에 기계어가 아니라면 기계어로 변환하여 CPU의 부담을 줄일 수 있고, 앱을 더 빠르게 렌더링 가능하다.
    • AOT 컴파일: 컴퓨터가 바로 실행할 수 있는 기계어로 미리 컴파일하여, 빌드할 때 시간이 더 걸린다.

3. Flutter의 장점

웹뷰, 리액트 네이티브와 같은 자바스크립트 기반의 크로스 플랫폼과 비교하였을 때 다음과 같은 장점이 있습니다.

1) 성능

웹뷰(하이브리드 앱), 리액트 네이티브와 같은 자바스크립트 기반의 크로스 플랫폼의 경우 네이티브 코드와 통신할 때 자바스크립트 브릿지를 만들어야 했습니다.
하지만 Flutter는 자체 렌더링 엔진인 Skia 엔진(C, C++로 구현)을 탑재하고 있고, 이를 통해 직접 컴파일하기 때문에 고성능을 내며 네이티브와 바로 소통, 화면의 모든 픽셀을 직접 제어할 수 있습니다.

2) Material Design, Cupertino

Flutter는 Android의 Material Design(기본 설정) 뿐만 아니라, iOS의 Cupertino 패키지 또한 제공합니다. 따라서, OS 별 사용자에게 익숙한 디자인 가이드 대로 앱을 제공하는 것이 용이합니다.

3) Native Library

대부분의 화면 개발은 Flutter로 가능하지만, 일부 기능의 경우 Native 기능이 필요할 때가 있습니다. 일부 Native 기능의 경우 Flutter에서 Android와 iOS의 기능을 감싸고 있는 플러그인을 제공하여 간단히 작성할 수 있습니다.
한 예를 들어, 간단한 key-value 값을 저장하려고 한다면 Flutter의 shared_preference 플러그인을 활용할 수 있습니다. 이는 Android의 SharedPreferences, iOS의 NSUserDefaults를 감싸고 있어 pub spec.yaml 파일에 종속성 추가, import하여 간단히 사용할 수 있습니다.

4. Flutter의 기본

“Everything is widget”

플러터의 모든 것은 위젯입니다. 플러터의 스타일, 애니메이션, 리스트, 텍스트, 버튼 등 화면에 그려진 모든 것들은 위젯입니다. 하지만 보이는 것만을 의미하는 것은 아니며 사용자의 제스처를 감지하는 요소인 GestureDetector 또한 위젯이며 정렬 기능을 주는 Center 또한 위젯입니다. Flutter는 상속보다는 이러한 모든 위젯을 조합해 화면을 만드는 것입니다.
혹시 이해가 가지 않는다 해도 간단한 Flutter 샘플 앱 하나만 만들어 보아도 이해가 갈 것입니다.

5. Flutter 학습 시 핵심?

  • 생명주기(LifeCycle)
  • StatelessWidget과 StatefulWidget
  • 상태(State)관리
    : Flutter의 상태 관리 방법은 여러가지가 있지만 아래가 대표적 솔루션들입니다.
    ex) BLoC, getx, provider, get_it 등

각 내용에 대해 더욱 자세한 내용은, 아래 참고 자료를 참조해주시길 바랍니다!

참고자료

Github

profile
4년차 앱개발자입니다.

0개의 댓글