[Flutter] Skia Engine

Jinwook Kim·2024년 8월 12일
0

Flutter

목록 보기
1/7

플러터의 핵심에는 스키아(Skia)라는 그래픽 엔진이 있다. 이 스키아는 플러터에서 모든 UI 렌더링을 담당하는 중요한 엔진이다. 스키아는 2D 그래픽 라이브러리로 동작하며, 고성능의 그래픽 UI를 그리기 위한 API를 제공한다. 스키아 엔진은 플러터뿐만 아니라, 구글 크롬(Chrome), 안드로이드(Android), 그리고 다른 구글의 제품에서도 사용된다. 참고로, 스키아 엔진 자체는 C++로 작성되어, 매우 빠른 성능을 보여준다.
플러터는 내부적으로 들여다 보면 세 개의 층위로 구성되어 있다. 가장 아래에 임베더(Embedder) 계층이 자리하고 있는데, 이 계층은 플랫폼 각각의 네이티브 언어로 작성되어있다. 즉, 안드로이드라면 자바나 코틀린, iOS라면 스위프트, 웹이라면 웹어셈블리어인 식이다. 그 다음 중간 층위에 바로 스키아 엔진이 자리하고 있다. 맨 위에는 개발자가 직접 앱과 소통을 할 수 있는 프레임워크(Framework) 계층이 자리하고 있다. 이 계층은 다트 언어로 작성되어 있다. 실제로 개발자가 코딩을 하는 부분이 이 계층이다. 스키아 엔진은 보다시피, 중간에서 임베더 계층과 프레임워크 계층을 중계하고 있다고 볼 수 있다.

플러터는 모든 위젯의 렌더링은 스키아 엔진을 통해 구현한다. 일반적인 모바일 프레임워크는 각 플랫폼의 네이티브 언어(코틀린, 스위프트 등)를 사용하여 UI를 구축하지만, 플러터는 자체적인 렌더링 엔진인 스키아 엔진으로 모든 UI 구성 요소를 직접 그린다. 이로 인해, 모든 플랫폼에서 동일한 UI를 렌더링할 수 있어 일관된 UI 디자인이 가능하다.

앞서 설명했듯, 스키아 엔진 자체는 C++ 언어로 작성되어 있어 매우 효율적이고 빠른 렌더링 성능을 제공한다. 뿐만 아니라, 강력한 그래픽 처리 능력 덕분에 플러터로 복잡한 애니메이션과 그래픽 효과를 쉽게 구현할 수 있다. 스키아 엔진은 기본적으로 2D 그래픽 엔진이기 때문에, 직선, 곡선, 원 등 다양한 2D 벡터 그래픽 구현에 강점을 가진다. 또, 비트맵 이미지를 렌더링하고 조작할 수 있는 기능을 가지고 있으며, 다양한 폰트와 텍스트 스타일의 텍스트를 화면에 렌더링할 수도 있다. 안티앨리어싱으로 부드러운 가장자리 렌더링이 가능한 것도 덤이다.

단점으로는, 역시 2D 엔진이기 때문에, 3D 그래픽 렌더링에 적합하지 않다는 점이다. 3D 그래픽을 구현하려면 Unity나 WebGL을 지원하는 서드파티 라이브러리를 이용하거나, 저수준에서 네이티브 코드를 호출해야 한다. 이를 통해 OpenGL이나 Vulkan을 직접 호출해야 한다는 필요성이 생긴다.

플러터가 리액트 네이티브(React Native)나 다른 크로스플랫폼 프레임워크에 비해 강점을 가지는 부분이 바로 이 스키아 엔진의 존재이다. 스키아 엔진은 고성능 UI를 효율적으로 렌더링할 수 있고, 다양한 디바이스에서 일관된 UX(User Experience)를 제공해주는 데에도 중요한 역할을 하고 있다.

profile
200 Everything Okay.

1개의 댓글

comment-user-thumbnail
2024년 8월 16일

스키아 엔진에 대해 잘 몰랐는데 알기 쉽게 설명해주셔서 잘 읽고갑니다~!

답글 달기