Dart의 주요 장점

로건·2022년 6월 27일
1

Dart

목록 보기
2/3

Dart가 처음 나왔을 때(2011년), js를 대체하기 위한 언어로써 소개되었지만 높은 러닝 커브, 세련되지 않은 언어적 특성, js를 대체할 다른 언어의 존재(ts 등)로 인해 외면받았고 인기를 끌지 못했습니다.

그러나, 모바일 크로스 플랫폼 Flutter를 지원하는 언어로 Dart를 사용하게 되면서 인기몰이를 하는 중입니다. 그저 Flutter에서 사용하기에 Dart가 인기 있는 걸까요? 아니면 Dart에 어떠한 장점이 있기 때문에 Flutter에서 Dart를 선택한 걸까요? 후자라고 생각하고 클라이언트에 최적화된 언어 Dart의 장점을 알아보도록 하죠!^^

  • JIT, AOT 모두 지원
  • 핫 리로딩 기능
  • 네이티브에 필적하는 성능
  • 데드락(기능마비) 처리
  • 메모리 할당 해지??



Jit, AOT 모두 지원

💡 JIT(Just In Time)
컴파일, 인터프리트 방식을 섞어 놓은 방식으로 프로그램 실행 중(사용할때)에 컴파일이가능한 방법.
캐싱을 사용하여 자주사용되는 코드를 어딘가에 저장해두고(컴파일 언어의 특성)
실행시점에 인터프리터 방식인 한 줄씩 읽기를 하면서 실행된다.

💡 AOT(Ahead of time)
프로그램 작성 중 컴파일을 실행하는 방법.
인터프리터 방식처럼 런타임에 들어서기 전에 모든 컴파일을 완료시키고 프로그램이 동작된다. 런타임 시(실행 중 일때) 속도가 빠르지만 개발 시에는 무조건 재실행 되기에 개발속도가 느리다.

Dart Virtual Machine 위에서 Jit 컴파일 기능을 활용하여 코드 수정때마다 재실행하지 않고 핫리로딩하여 편리하게 개발이 가능합니다!

하지만 Virtual Machine에서 동작하기 때문에 느립니다. 이러한 단점을 메꾸기 위하여 개발할때는 VM + Jit(과 핫리로딩)을 통하여 개발시간을 단축시켜주고 배포할 때에는 AOT 컴파일을 통해서 런타임에서 바로 동작하는 코드를 만들 수 있습니다.



핫 리로딩 기능

보통 실행 시에는 프로그램이 재실행되지만 위에서 말함 VM+JIT 컴파일러를 이용해 실행 중 바뀐 부분만 코드를 다시 로드할 수 있습니다. 이는 당연하게도 개발속도를 대폭 올려줍니다!



네이티브에 필적하는 성능

Flutter는 React Native 처럼 브릿지를 이용하여 UI를 그리지 않습니다.

💡 브릿지
작성된 코드를 네이티브 코드로 변환하는 기능을 함.
당연하게도 변환하는 시간이 있기 때문에 속도가 느리다.

Flutter는 직접 프레임워크 단에서 UI를 그리기 때문에 빠릅니다!(자신만의 UI 엔진을 가지고 있습니다)



데드락 처리

Swift나 Kotlin같이 다중 스레드를 지원하는 언어는 쓰레드 선점형 기법을 사용합니다. 즉 조건이 만족된다면 CPU 자원사용의 주도권을 다른 쓰레드가 가져가게 됩니다. 이러한 멀티쓰레딩은 Race Condition이 발생하며 이를 막기위해 Lock을 걸면 Dead Lock 상태에 빠져 앱이 구동을 멈추는 심각한 버그가 발생할 수 있습니다.

💡 Race Condtion(경쟁조건)
공유 자원에 동시 접근하고 접근이 어떤 순서에 따라 이루어졌는가에 따라 결과가 달라지는 것.(개인적으로 이름만으로 정의를 유추하긴 힘들다고 생각한다.)

💡 Dead Lock(교착 상태)
쓰레드끼리 자원 경쟁을 하다가 어떤 쓰레드도 자원을 할당받지 못하여 프로그램이 더 이상 실행되지 않는 상태

이러한 문제를 Dart는 isolate라고 불리는 단일 쓰레드를 사용하여 해결하였습니다. 고유의 Event Loop와 메모리(private heap)를 가진 쓰레드입니다.(이는 Dart에서 굉장히 중요한 개념이므로 추후 따로 글을 쓸 예정입니다!)



메모리 할당 및 해지

힙 공간에 메모리를 할당(인스턴스를 생성)하게 되면 당연하게도 해지를 해줘야 합니다. Dart에서도 할당해지 일을 처리하는데 이를 위해 두 가지의 기술이 존재합니다.

바로 Young Space Scavenger와 Parallel mark-sweep collector
일단은 간단하게 메모리 할당 해지를 위해 일을 하는 존재들이라 생각하시면 됩니다!(이것도 따로 글을 빼서 작성하겠습니다😂



Dart언어의 장점에 대해서 쭉 설명해보았습니다ㅎㅎ 읽어주셔셔 감사합니다!😁

profile
Life Designer

0개의 댓글