카테고리 없음

Flutter 아키텍처와 Dart 언어의 크로스 플랫폼 원리

mark340 2024. 8. 11. 19:53

Flutter는 단일 코드베이스로 iOS와 Android 플랫폼에서 애플리케이션을 개발할 수 있는 강력한 프레임워크입니다. 이 포스팅에서는 Flutter의 아키텍처와 Dart 언어가 어떻게 iOS와 Android에서 작동하는지에 대해 알아보겠습니다.

 

1. Flutter의 아키텍처

 

Flutter의 아키텍처는 세 가지 주요 구성 요소로 나눌 수 있습니다: Flutter 엔진, Flutter 프레임워크, 그리고 Dart 언어입니다.

 

Flutter 엔진 (Flutter Engine)

 

Flutter 엔진은 C++로 작성되었으며, 애플리케이션의 렌더링, 스케줄링, 그리고 네이티브 코드와의 상호작용을 처리합니다.

이 엔진은 Skia라는 고성능 2D 그래픽 라이브러리를 사용하여 UI를 그리며, 플랫폼에 종속되지 않고 일관된 UI를 제공합니다.

 

Flutter 프레임워크 (Flutter Framework)

 

Flutter 프레임워크는 Dart로 작성되었으며, 위젯을 사용해 UI를 구성하고, 내비게이션, 상태 관리 등의 애플리케이션 로직을 처리합니다.

위젯은 Flutter의 기본 구성 요소로, iOS와 Android에서 동일한 코드로 동작할 수 있습니다.

 

Dart 언어 (Dart Language)

 

Dart는 Flutter 애플리케이션의 주 프로그래밍 언어입니다. 정적 타이핑을 지원하며, 개발 중에는 JIT(Just-In-Time) 컴파일, 배포 시에는 AOT(Ahead-Of-Time) 컴파일을 통해 최적화된 네이티브 코드로 변환됩니다.

 

2. Flutter 프레임워크의 크로스 플랫폼 작동 원리

 

Flutter 프레임워크는 동일한 Dart 코드를 iOS와 Android에서 모두 실행할 수 있습니다. 이 과정은 다음과 같은 방식으로 이루어집니다.

 

플랫폼 독립적 UI 구성

 

Flutter의 UI는 Dart로 작성된 위젯을 사용하여 구성됩니다. 이 위젯들은 iOS와 Android에서 동일하게 동작하며, 플랫폼 독립적인 UI를 제공합니다.

Flutter는 두 플랫폼에서 동일한 사용자 경험을 보장하기 위해 Skia를 사용해 UI를 렌더링합니다.

 

Dart 코드 컴파일

 

JIT 컴파일: 개발 중에는 JIT 컴파일을 사용해 Dart 코드를 런타임에 네이티브 코드로 변환합니다. 이 방식은 빠른 피드백과 핫 리로드(Hot Reload)를 가능하게 합니다.

AOT 컴파일: 배포 시에는 AOT 컴파일을 통해 Dart 코드를 최적화된 네이티브 코드로 변환하여, iOS와 Android에서 성능이 뛰어난 애플리케이션을 제공합니다.

 

플랫폼 채널 (Platform Channels)

 

Dart 코드와 네이티브 코드(Java/Kotlin for Android, Swift/Objective-C for iOS) 간의 상호작용은 플랫폼 채널을 통해 이루어집니다. 이를 통해 네이티브 기능(예: 카메라, GPS, 센서 등)을 사용할 수 있습니다.

플랫폼 채널은 Dart와 네이티브 간의 데이터 및 호출을 전달하여, 두 플랫폼에서 Flutter 애플리케이션이 원활히 동작할 수 있게 합니다.

 

3. Dart 언어가 iOS와 Android에서 작동하는 원리

 

이제 Dart 코드가 어떻게 iOS와 Android에서 네이티브 코드로 변환되고 실행되는지 살펴보겠습니다.

 

컴파일 과정

 

JIT 컴파일: 개발 중에는 빠른 코드 실행을 위해 JIT 컴파일을 사용합니다. Dart 코드는 런타임에 네이티브 코드로 변환되어 즉시 실행됩니다.

AOT 컴파일: 배포 시에는 Dart 코드를 AOT 컴파일하여 최적화된 네이티브 코드로 변환합니다. 이 코드가 실제 기기에서 실행되며, 성능을 최적화합니다.

 

Flutter 엔진과 네이티브 코드

 

Flutter 엔진은 Dart VM을 포함하며, 이 VM은 JIT 컴파일된 코드를 실행합니다. 배포된 애플리케이션에서는 AOT 컴파일된 코드가 네이티브 환경에서 실행됩니다.

플랫폼 채널을 통해 Dart 코드와 네이티브 코드 간의 상호작용이 이루어지며, 두 플랫폼의 고유 기능을 활용할 수 있게 합니다.

 

4. 요약 및 결론

 

Flutter의 아키텍처는 Flutter 엔진, Flutter 프레임워크, Dart 언어로 이루어져 있으며, 이 세 요소는 iOS와 Android 두 플랫폼에서 모두 작동할 수 있게 해줍니다. Dart 코드는 JIT 및 AOT 컴파일을 통해 네이티브 코드로 변환되고, Flutter 엔진은 플랫폼 독립적인 UI 렌더링과 네이티브 코드와의 상호작용을 처리합니다. 플랫폼 채널은 Dart와 네이티브 코드 간의 통신을 관리하여, Flutter 애플리케이션이 두 플랫폼에서 원활히 실행될 수 있도록 합니다.

 

이러한 구조 덕분에 개발자는 한 번의 코드 작성으로 두 플랫폼에서 작동하는 애플리케이션을 쉽게 개발할 수 있습니다.