카테고리 없음

Dart 시작하기 - #0.1 Why Dart / flutter는 왜 dart를 선택했을까?

샤크데브 2025. 7. 14. 15:19

 

 

Dart 시작하기 – 노마드 코더 Nomad Coders

Flutter 앱 개발을 위한 Dart 배우기

nomadcoders.co

 

노마드 코더의 Dart 시작하기 강의를 보고 작성한 글입니다.

 

 

 

dart에는 dart webdart native라는 두가지 컴파일러가 있다.

 

dart web은 dart로 쓴 코드를 javascript로 변환해주는 컴파일러이다.

 

dart native는 dart 코드를 여러 CPU의 아키텍쳐에 맞게 변환해주는 파일러이다. 

예를 들어 사진과 같이 ARM32에 맞게 변환하거나, 모바일 기기에서 사용하는 ARM64로도 가능하고, 데스크탑용으로도 변환이 가능하다. 그래서 dart를 쓰는 것만으로도 IOS, Android, Windows, Linux, Mac으로 컴파일이 가능하다. 

여기에 더해서, 더 작은 전력의 아키텍쳐로도 변환이 가능하기 때문에, 사물인터넷을 만드는 데에도 flutter을 사용한다.

 

dart의 또 다른 놀라운 점은 어떻게 컴파일 되는지에 관한 건데, just-in-time, ahead-of-time 이라는 것이다.

 

JIT(just-in-time), AOT(ahead-of-time)

 

ahead-of-time은 코딩이 끝난 컴파일 할 때 아키텍쳐를 지정해주어야 한다.

예를 들어 C++프로그램을 windows에 배포하려고 하면, 코드를 windows 바이너리로 컴파일을 하고, 그 바이너리를 제공하는 것이다. 바이너리는 기계어이고, C 컴파일러는 그걸 기계어로 컴파일 해주는 것이다. 사람들이 컴퓨터에서 그 코드를 실행할 수 있도록 해주는 것이다. - 컴파일 먼저하고, 그 결과인 바이너리를 배포하는 것 

 

이렇게 하나의 아키텍쳐를 위해 컴파일 하는 것은 시간이 오래 걸린다. 왜냐하면 컴파일러는 아주 많은 최적화를 해야하고 코드를 기계어로 바꾸는 등 하는 일이 많기 때문이다. 그래서 UI를 만들거나 개발을 하고 있을 때에는 적절한 방법이 아니다. 

 

 

그래서 just-in-time 컴파일러가 필요하다. just-in-time 컴파일러는 dart VM을 사용하는데, 작성한 코드의 결과를 화면에 바로 보여준다. 가상머신에서 코드가 실행되기 때문에 속도는 느리지만, 개발 중일 때만 쓰이고 배포하는 경우에는 ahead-of-time 컴파일러가 사용된다. 

 

 

이를 쉽게 설명하자면,

 

개발중(just-in-time 컴파일러) -> 가상머신에서 dart코드가 실행되기 때문에 변경한 코드가 화면에 바로 보여진다.

개발이 끝나고 배포하는 경우(ahead-of-time 컴파일러) -> 하나의 아키텍쳐를 위해 컴파일 되기 때문에 가상머신에서보다 빠른 속도로 돌아간다.

 

 

null safety

 

안전한 프로그램을 빌드할 때 중요하다. Java나 C++등 많은 프로그래밍 언어에서 이와 관련된 문제가 있는데, 개발자가 null 값을 참조해버리면 모든 게 고장나게 된다. (추후에 flutter강의에서 다시 설명)

 

 

 

그래서 flutter는 왜 dart를 선택했을까?

 

첫 번째로, just-in-time 컴파일과 ahead-of-time 컴파일이 둘 다 있기 때문이다.

위에서 설명했듯이 모바일 개발을 할 때 편하고 좋은 언어이다. (빠른 피드백이 가능하면서, 최종 프로그램은 컴파일되어서 빠르다)

 

두 번째로는, dart와 flutter는 모두 구글에서 만들었기 때문이다. 이 뜻은, 구글에서 flutter를 위해서 얼마든지 dart를 최적화 할 수 있다는 이다. flutter가 언어에 대해 무언가 필요한 게 있을때, 언어를 수정 할 수 있다. 이는 다른 프레임워크(react-native, django, flask 등)에서 볼 수 없는 모습이다. 예를 들어, reactjs 팀은 facebook인데 javascript를 수정할 수 없다. react를 좀 더 효율적으로, 빠르게 만들고 싶다고 javascript를 수정할 수 없다.