Weekly Flutter

[Flutter 아는 척하기] 플러터 선택의 이유

파랑o 2023. 2. 15. 03:49

왜 Dart일까?

정적 컴파일, 동적 컴파일 체리픽

프로그램 실행 방식

  • 정적 컴파일 방식: AOT(Ahead Of Time), Static Compilation
    • 정적인 방식이다.
    • 실행 전에, 고급 언어의 명령어들을 컴파일러를 통해 기계어나 중간 언어로 변환한다.
    • 변환된 기계어를 실행한다.
    • 장점: 실행 속도가 빠르다. 컴파일 과정중에 성능 최적화가 가능하다.
    • 단점: 컴파일 과정의 시간이 오래 걸린다.
    • 예시: C/C++, Java, 
  • 인터프리터 방식: JIT(Just In Time), Dynamic Interpretation
    • 동적인 방식이다.
    • 실행 중에, 고급 언어의 명령어들을 한 번에 한 줄씩 인터프리터를 통과시켜 중간 언어로 변환한다.
    • 한 줄의 명령어가 변환되면 바로 실행한다.
    • 장점: 빠르게 수정하고 테스트하기 쉽다.
    • 단점: 실행 중에 번역이 이루어지므로 실행 중의 성능이 비교적 좋지 않고, 최적화가 불가능하다.

Flutter의 실행 방식

  • 개발 모드에서는 인터프리터 방식(JIT)을 사용해 코드 리로드의 속도를 높여, 개발 속도 또한 높였다. Hot Reload가 가능한 이유다. (우리가 디버그 모드로 빌드할 때 오래걸리는 것은, AOT 방식의 Swift, Kotlin 코드를 컴파일하기 때문이다.)
  • 릴리즈 모드에서는 보통의 컴파일 방식(AOT)을 사용하여 성능을 최대로 끌어올린다.

왜 선언형 UI일까?

절차보다는 상태가 중요

UI 개발 패러다임

View view = new view();
Button button = new button();
button.setColor(red);
button.setText('It is button.');
view.add(button);
  • 명령형(Imperative) 
    • 상태(레이아웃)를 작성하는 부분(ex. xml, html 등)과 변화 과정(ex. swift, kotlin, javascript 등)을 기술하는 부분을 모두 작성해야 한다.
    • iOS의 Storyboard, layout.xml을 이용한 Android UI 개발 등이 해당한다.
View(
  child: Button(
    color: red,
    text: 'It is a button.',
  ),
)
  • 선언형(Declarative)
    • 상태(레이아웃)를 하나의 언어로 구현하고, 상태간 변화 과정은 프레임워크에 맡긴다.
    • Flutter, iOS의 SwiftUI, 안드로이드를 위한 Jetpack Compose 등이 해당한다.

Flutter의 선언형 UI가 인기인 이유

  • 상태들 사이의 전이 과정을 어떻게 프로그래밍 할 것인가에 대한 개발자의 부담이 사라졌다.
    • 개발자가 기존 인스턴스의 속성을 변경하는 것이 아닌, 프레임워크가 새로운 상태에 맞는 새로운 인스턴스를 생성한다.
    • 상태를 기술한 파일의 식별자와 변화 과정을 기술한 파일의 식별자를 매핑하는 과정이 사라졌다.