Flutter는 컴파일 언어? 인터프리터 언어? JIT와 AOT의 원리

2025. 12. 27. 14:29·Flutter

0️⃣ Flutter는 컴파일 언어인가요 인터프리터 언어인가요?

 어느날 갑자기 동료가 물어보았다! "Flutter는 컴파일 언어인가요, 인터프리터 언어인가요?" 컴파일 언어와 인터프리터 언어에 대해 구분하여 공부해본 적은 있어도 정작 내가 주로 사용하는 언어가 어떤 유형의 언어인지는 궁금해 한 적이 없다. 그래서 얼렁뚱땅 컴파일 언어인 걸로 알고 있었어요... 라고 대답했지만 정작 이 부분에 깊게 공부해보니 JIT와 AOT의 개념이 등장하기 시작했다. 하지만 JIT와 AOT를 제대로 알기 위해선 컴파일 언어와 인터프리터 언어에 대해서 알고 있어야 한다. 컴파일 언어와 인터프리터 언어에 대한 구체적인 차이점은 이전 블로그 포스팅을 통해 확인할 수 있다. 대충 이런 내용이니 아래 내용을 통해 확인해보자.

 

[얼레벌레 공부하는 CS] 컴파일 언어와 인터프리터 언어

0️⃣ 고급 언어와 저급 언어컴파일 언어와 인터프리터 언어에 대해 알기 전에 먼저 이해하고 넘어가야 할 부분이 있다.컴퓨터는 0과 1로 된 정보만을 읽고 이해할 수 있다.위 말처럼 컴퓨터는 0

kkevido.tistory.com

 

 하지만 좀 더 이해하기 쉽게 간단하게 설명해보도록 하겠다.

  • 컴파일 언어 (Compile Langauge): 철도를 모두 쌓아놓고 기차를 달리는 것
  • 인터프리터 언어 (interpreter Langauge): 실시간으로 철도를 쌓으며 기차를 달리는 것

대충 이정도로 이해하면 되겠다.

기차로 비유하게 된 사유. 인터프리터 언어와 아주 찰떡이다.

 

1️⃣ 그래서 Flutter는 뭔데?

 Cross Platform 언어의 대명사인 Flutter는 공교롭게도 하이브리드형이다. Flutter는 프레임워크로서 Dart의 컴파일 방식을 따르는데 Dart는 Flutter만을 위해 만들어진 언어로서, 컴파일 언어일 수도 인터프리터 언어일 수도 있다는 것이 문제다. 도대체 이게 무슨 말일까 싶겠다. Flutter는 Debug 모드일 때와 Release 모드일 때 컴파일 방식이 다르기 때문이다. 여기서 제대로 JIT와 AOT 개념이 등장한다.

 

  1. JIT (Just-In-Time)
    • JIT 방식은 인터프리터 언어와 같은 방식으로 동작하고, Debug모드에서 동작하는 방식이다.
  2. AOT (Ahead-Of-Time)
    • AOT 방식은 컴파일 언어와 같은 방식으로 동작하고, Release모드에서 동작하는 방식이다.

Dart VM이 JIT와 AOT 모드를 구분하여 동작하도록 만들어준다.

 

2️⃣ JIT와 AOT를 굳이 나눈 이유는?

 그렇다면 Flutter의 동작 원리를 JIT와 AOT로 굳이 나눠둔 이유가 있을 것이다. 바로 개발 편의성과 사용자 경험 개선을 위해서다. (어떻게 보면 개발 편의성을 개선하는 것도 사용자의 경험 개선이 아닐까 싶긴 하다. 개발자도 결국엔 Google의 사용자니까...)

 아무튼, 개발 편의성하면 무엇이 있는가 생각해보자. Flutter는 React를 대놓고 따라 만든 프레임워크다. 그리고 Android Kotlin 개발을 하면서 무엇이 가장 불편했는지까지 떠올리면 바로 알 수 있다. 바로, 핫 리로드다!

Hot Reload

 처음 개발을 리액트로 접했을 때 나는 핫 리로드의 편리함을 그리 알지 못했다. Android Kotlin을 접하고 나서야 그 소중함을 알게 되었다. Flutter는 React와 매우 유사한 구조로, 트리로 위젯이 구성되어 있어 상태값이 바뀐 위젯만 갈아치움으로써 핫 리로드를 수행할 수 있다. 그리고 이것을 돕는 것이 바로 JIT 엔진이다. 즉, 개발자가 코드를 작성하고 자신의 코드가 제대로 돌아가는지 확인하기 위해서 일일이 매번 새로 빌드할 필요가 없다는 뜻이다.

 

 JIT가 이렇게 혁신적인 이유로 설계되어있는 것이라면, 반대로 AOT는 왜 필요한 것일까? 사용자에게 직접 제공 되는 apk, aab 등의 파일 등에 Hot Reload와 같은 기능이 필요할 리가 만무하다. 때문에 Release모드로 빌드될 때 Dart Compiler는 JIT 컴파일러를 완전히 제거 하고 Flutter Code를 온전히 AOT 컴파일 언어로서, 즉 한 번에 기계어로 번역될 수 있도록 만든다.

 

3️⃣ 한 눈에 보는 JIT와 AOT

  JIT AOT
실행모드 Debug Mode Release Mode
비유 달리는 기차 앞에서 철도 깔기 철도 깔아놓고 기차 출발하기
장점 Hot Reload 빠른 실행속도, 적은 용량
단점 실행속도가 상대적으로 느림 (아니 진짜 느린 것 같다;) 빌드 시간이 오래 걸림
특징 JIT 엔진이 직접 실행함. JIT 엔진은 삭제 되고 GC만 남음

 

 Flutter는 JIT와 AOT 엔진으로 동작한다는 것이 핵심이다.

 

4️⃣ Dart VM과 GC는 또 뭔데...?

 일부러 위 포스팅에서 굳이 언급하고 넘어가지 않았는데, Dart VM (Dart Virtual Machine)과 GC (Garbage Collection)가 무엇인지에 대해서는 이 JIT와 AOT에 대해 완벽히 알고 넘어가면 훨씬 이해하기 쉬울 것이다. 해당 내용은 다음 포스팅에서 마저 작성해보겠다.

❗ 출처

참고 사이트 : https://medium.com/@howyoujini/코드가-어떻게-화면이-되나-1-aot-vs-jit-compilation-with-flutter-19af2b5f8d51

저작자표시 비영리 변경금지 (새창열림)

'Flutter' 카테고리의 다른 글

Flutter의 핵심, Element Tree  (4) 2026.01.12
Flutter의 아이콘, Symbol 적용하기  (0) 2025.10.24
Flutter 프로젝트 생성하기  (0) 2025.09.11
Flutter로 WebView 만들어보기  (0) 2024.04.24
Flutter의 Widget 종류 : Stateless와 Stateful  (0) 2024.03.27
'Flutter' 카테고리의 다른 글
  • Flutter의 핵심, Element Tree
  • Flutter의 아이콘, Symbol 적용하기
  • Flutter 프로젝트 생성하기
  • Flutter로 WebView 만들어보기
깨비도
깨비도
그림 그리는 개발자의 인디게임 생존기 & Flutter 연구소
  • 깨비도
    KKEVi.log()
    깨비도
  • 전체
    오늘
    어제
    • 전체 (98) N
      • 인디게임 개발일지 (6) N
      • C# (1) N
      • Dart (3)
      • Flutter (24)
        • 문제해결 (14)
      • Kotlin (12)
      • Android (22)
        • 문제해결 (11)
      • CS (10)
        • Network (1)
      • 알고리즘 (10)
        • 코딩테스트 (10)
      • etc (10)
        • Git (1)
        • React (1)
  • 블로그 메뉴

    • 방명록
  • 링크

    • 그림 전문 일지
  • 공지사항

  • 인기 글

  • 태그

    DART
    인디게임개발
    게임아트
    XML
    thread
    DartVM
    MacOS
    Firebase
    Android
    flutter
    OS
    게임개발
    Unity이펙트
    Gemini
    게임기획
    C#
    when
    인디게임
    ram
    IOS
    네트워크
    context
    유니티
    stack
    플랫포머_배경
    Kotlin
    2D아트워크
    플러터
    Dear.MyMarionette
    CS
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.5
깨비도
Flutter는 컴파일 언어? 인터프리터 언어? JIT와 AOT의 원리
상단으로

티스토리툴바