필자를 비롯한 Flutter를 통한 Cross-Platform 개발을 시작하려는 사람들의 경우, Dart 언어도 함께 들어보았을 것이다.
몇몇의 경우, Dart와 Flutter의 출시 시기가 비슷하다고 생각하고 또 그렇게 알고 있는데
실제로 Flutter는 2018년, Dart는 2011년에 처음으로 세상 바깥으로 나오게 되었다.
그렇다면 이미 많은 프로그래밍 언어들이 있었고, 큰 주목을 받지 못했던 Dart를 어째서 Flutter의 언어로 채택하였을까?
프로그래밍 언어 Dart의 특징, 채택될 수 있었던 이유에 대하여 알아보도록 하자!
Dart?
Dart는 객체 지향 언어이며, Google에서 개발한 프로그래밍 언어이다.
"JavaScript를 대체 가능한 Cross-Platform 프로그래밍 언어"를 목표로 설계 되었다.
Dart의 특징
위에서 말했듯, Dart는 JS 대체, 크로스 플랫폼 전용에 Focus를 맞추었기 때문에 여러 특징들이 있다.
그중에서도 Dart 공식 홈페이지(https://dart.dev/)에서 내세우는 3가지 큰 특징이 있다.
1. Optimized for UI (UI 최적화)
2. Productive development (생산적인 개발)
3. Fast on all platforms (모든 플랫폼에서 빠른 속도)
각각의 특징을 간단하게 살펴보도록 하자 :)
Optimized for UI (UI 최적화)
Dart는 사용자 인터페이스를 구축하기 위하여 비동기 코드 작성이 필요할 경우에, `async-await`을 지원 및 제공한다.
또한, `isolate-based concurrency`를 통하여 복잡한 작업을 동시 처리할 수 있다고 한다.
Productive development (생산적인 개발)
필자가 Dart라는 언어에 가장 매력을 느낀 부분이다!
Dart는 `hot reload`라고 불리는 기능을 갖고 있어, 소스 코드를 반복적으로 변경하고, real-time으로 실행 중인 앱에서의 변경 사항을 즉각적으로 확인이 가능하다.
이는 Dart가 개발 환경에서는 JIT(Just-In-Time) 컴파일러를 사용하기 때문이다. 이 과정에서 Dart Virtual Machine을 사용한다.
Dart Virtual Machine을 이용한 JIT가 가져오는 장점과 단점은 아래와 같다.
장점 | 단점 |
변경된 부분에 대해서만 컴파일을 진행하기 때문에 변경 사항을 빨리 확인 가능. | Virtual Machine(가상 머신) 내부에서 코드가 동작하기 때문에 기본적으로 속도가 느림. |
만약, 간단한 수정 사항을 확인하는 데에 전체 코드를 컴파일해야 했다면 개발자 경험을 전혀 확보하지 못하였을 것이다. 이는 모바일 개발에서는 특히 중요한 부분이기 때문에 대표적 강점으로 손꼽아도 문제가 없다 생각한다.
Fast on all platforms (모든 플랫폼에서 빠른 속도)
Dart는 개발 중에는 JIT 컴파일러를 사용하지만, 배포 시에는 AOT(Ahead-Of-Time) 컴파일러를 이용한다. 앱이 실행될 때, 별도의 컴파일 단계 없이 시작할 수 있도록 돕기 때문에 응답성을 향상하는 동시에 UX(사용자 경험)을 확보할 수 있다.
또한, Dart Web은 Dart를 JavaScript로 변환해준다. 웹 개발에는 JS가 주로 사용되는 만큼이나 보장된 성능과 경험을 기대할 수 있다.
Flutter가 Dart를 채택한 이유는?
Dart가 매력적인 언어라는 것은 충분히 위에서 설명하였으니 본론으로 돌아와 Flutter가 Dart를 채택한 이유는 무엇일까?
위 특징들이 모두 이유가 될 수 있겠다! 하지만 정리를 해보자면 다음과 같다.
- JIT 컴파일 방식을 통한 개발 경험 확보, AOT 컴파일 방식을 통한 사용자 경험 확보
- Flutter와 Dart 모두 Google에서 개발된 프레임워크, 언어
JIT, AOT는 충분히 위에서 납득할만한 이유를 제시했지만, '같은 회사에서 개발했기 때문'이라는 이유는 와닿지 않을 수 있다.
하지만 프레임워크와 언어가 같은 회사에서 개발 되었다는 것으로부터 우리는 여러 기대를 할 수 있다.
실제 사례를 들어보면 Flutter가 Dart를 처음 도입했을 시점에는 AOT toolchaine이 존재하지 않았다.
하지만 개발 상황에서 수요가 생겼기 때문에 Flutter Team에서 Dart Team에게 기능 추가를 요청하였기에 추가된 것이다.
만약, 다른 프레임워크였다면 불가능했을 이야기이다.
예시로 React를 조금 더 편하게 사용하기 위해서 JavaScript를 변경을 요청하고 받아들여지기를 기다리는 것보다는 React 쪽에서 대안을 마련하는 것이 훨씬 빠르고 수월할 것이다.
이렇듯 Cross-Platform 환경, 개발 환경 모두 가지고 있는 팔방미인인 Dart 언어는 자사 프레임워크인 Flutter에게는 더할 나위 없이 안성맞춤이었을 것이다.
글을 마치며
기존 프로그래밍 언어와 유사하다는 특징을 가진 Dart이지만, 그럼에도 다른 언어이기 때문에 분명한 차이점은 있다.
앞으로의 포스팅은 Dart 언어에 존재하는 타입, 자료 구조 및 사용 방법에 대하여 작성해보려고 한다.
'Dart + Flutter' 카테고리의 다른 글
[Flutter] 플러터에서 효율적으로 TextStyle, Color를 관리하는 법 (0) | 2024.01.18 |
---|---|
[Flutter] 하단 Sticky UI 패턴을 적용하기 위한 스크린 템플릿 (0) | 2024.01.15 |
[Flutter] Pop Gesture(Swipe Back Gesture)에 의한 뒤로 가기 막기 (2) | 2023.11.25 |