Flutter/Dart 입문

[Dart] 쉬어가기. Dart? Flutter?

Couldi 2021. 10. 19. 12:39
반응형

21. 10. 19.

- Could -

 

이 글은 프로그래밍 입문을 Flutter 때문에 Dart로 시작하는 사람들을 위한 글입니다.
프로그래밍 언어가 가지고 있는 기본 컨셉 자체를 Dart라는 언어를 통해 설명하고,
많은 분들이 Flutter를 위해 학습한다고 생각해, 추후 Flutter 학습에 도움이 되는 방향으로 작성되었습니다.
1. Dart
    - Flutter와 Dart
    - Fuchsia와 Dart
2. Dart의 특징
3. Flutter
    - 장점
    - 단점

 

1. Dart

다트는 2011년 구글에서 만든 언어이다. 처음에는 JavaScript를 대체하겠다는 야심찬 계획으로 출발했지만, 대부분 사람의 인생처럼 계획되로 되지는 않았다. 'GOTO 컨퍼런스'에서 처음 발표되었고, 2013년에 초기 1.0 버전이 공개되었지만 큰 반응은 얻지 못했다. 2018년에는 배울 필요 없는 언어 1위에 랭크되기도 했으니, 그렇게 핫한 언어라고 할 수는 없었다. 그런데 나는 왜 다트를 공부하고, 다트로 프로그래밍을 입문하는 사람들을 위해 지금 이 글을 쓰고 있는가? 이게 다 Flutter때문이다.

 

Flutter와 Dart

Flutter는 2018년 1.0 버전이 출시 되었으며, 하나의 코드 베이스로 안드로이드, IOS, Web, Desktop 등 기기와 운영체제를 가리지 않고 모두 동작하는 앱을 만들겠다는 야심찬 프로젝트였다. 단순 프레임워크로 자리잡는 것도 달성하기 어려운 목표인데, 크로스플랫폼 프레임워크로 자리잡겠다는 야망은 무모한 도전으로 보일 수도 있었다.

구글은 플러터 개발을 위해 프로그래밍 언어를 결정해야했고, 많은 사람들에게 익숙한 Java나 JavaScript를 선택하는 방법도 있었다. 아얘 iOS 지원을 위해 오브젝티브C나 스위프트로 개발하는 하는 방법도 있었고, 마이크로소프트처럼 C#을 선택하는 방법, 아니면 구글에서 만든 다른 언어인 Golang을 쓰는 방법 또한 가능했다.

하지만 구글의 선택은 Dart였고, 그 결과 우리가 아는 현재의 플러터와 다트의 모습을 갖춰나가기 시작했다. 구글이 어째서 Dart를 선택했는지는 많은 개발자들이 Dart언어의 특징을 들어 설명하는 글이 있지만, 그런 이유들이 '꼭' Dart를 써야만하는 이유가 되는 것은 아니다.

내가 생각에는 Flutter의 코어 개발자가 Dart언어의 코어개발자이기 때문이였다는 설이 가장 설득력있게 다가온다. (다른 이유가 더 필요한가?)

 

Fuchsia와 Dart

Dart와 관련된 자료들을 찾다보면 같이 언급되는 또 다른 단어가 있다. 'Fuchsia(퓨시아)' 쉽게 설명하자면 구글에서 개발 중인 차세대 OS다.  2016년 세상에 처음 공개되었고, 현재도 열심히 개발중이다. Flutter처럼 안드로이드, iOS, 윈도우, 맥 등의 운영체제를 대체하겠다는 또 어마무시한 야망을 가진 프로젝트이기에 어떻게 성장해나갈지 지켜볼만은 한 것 같다. 하지만 상대는 구글이기 때문에 언제 엎어지거나 사라져도 이상하지 않다. (플러터가 모든 운영체제에서 돌아가는 앱 개발을 꿈꾼다면, 퓨시아는 모든 기기에서 돌아가는 운영체제를 꿈꾸는 녀석이다.)

이런 Fuchsia가 Dart를 지원한다는건 Dart의 프로그래밍 언어로서의 입지가 더 확장될 수 있다는 가능성을 의미한다. 물론 어떻게 될지는 아무도 모른다. 단기적으로 Fuchsia를 통해 android부터 대체해 나가겠다는 목표를 가지고 있는것 같은데, 대체가 시작되는 순간이 온다면 Dart 개발자들의 몸값은 더 올라갈지도 모르는 일이다. 다시 한번 말한다. 상대는 구글이고, 어떻게 될지는 아무도 모른다.

 

 

2. Dart의 특징

그러면 Dart가 가지는 프로그래밍 언어로의 특징은 어떤 것들이 있을까. 기본적으로 다트는 C나 Java와 크게 닮아 있다. 그렇기 때문에 당신이 개발자라면 정말 '배울 필요가 없는' 언어이다. 읽으면 대충 뭐가 뭔지 다 알 수 밖에 없다. 기존 개발자들에게 언어의 진입장벽이 낮다는 것은 큰 장점이고, 개발자들을 위한 Dart 글이 아닌 Flutter때문에 Dart로 프로그래밍 공부를 시작하는 사람들을 위한 글을 연재하는 이유이기도 하다. 예전 같으면 프로그래밍 공부를 해보고 싶다는 사람들에게 Python이나 JavaScript로 시작해보라고 했겠지만, Flutter를 접한 이후 생각이 많이 바뀌었고, Dart라는 언어를 살펴보면서 바뀐 생각이 확신으로 바뀌었다.

Dart는 썩 괜찮은 언어다. 진심이다. 처음 배우는 사람들에게도 추천할 만큼 괜찮다. 다른언어를 먼저 공부해 봤다면 Dart를 공부하는데 큰 부담이 없는 것은 너무나도 명확하고, Dart를 먼저 공부하고 다른 언어를 공부할 때의 부담 역시 큰 무리가 안되는 수준이다.

그만큼 깔끔하고 명료한 언어이다.

 

다트가 프로그래밍 언어로 가지는 특징은 다음과 같다.

  • 객체지향언어이다.
  • C문법을 따르고 있어 대부분의 개발자가 쉽게 배울 수 있다.
  • Flutter 개발에 최적화 되어있다.
  • Null Safety를 지원한다. (대단하지는 않지만 엄청나다. 익숙해지기까지는 시간이 좀 필요하겠지만)

이 말고도 기술적인 특징들이 있긴 하지만, 배우는 입장에서는 그냥 '쉽게 배울수 있고, Flutter라는 유용한 사용처가 있으며, 개발시 발생할수 있는 실수들을 막아주기 위한 기능이 제공되는' 언어라고만 생각해도 충분하다.

 

3. Flutter

Dart를 공부해야하는 가장 큰 이유. 그건 바로 Flutter다. 사실 Dart를 따로 배우려하지 않아도 된다. Flutter를 사용해 개발을 진행한다면, 그 과정중에 자연스럽게 익혀질 '수도' 있다. (하지만 그닥 추천하고 싶은 방법은 아니다.)

Flutter는 앞서 조금 설명했듯, 대단한 야망을 가진 크로스플랫폼이다. 현재는 UI프레임워크로의 기능에 충실한 편이지만 점차 더 발전해 나갈 거라 생각한다. 많은 개발자들이나 스타트업에서 생각하는 Flutter의 가장 큰 장점은 Android와 IOS 개발을 한번에 해결할 수 있다는 점일 것이다. 기존 네이티브로 어플을 개발하고 있는 회사라면 모르겠지만, 이제 막 모바일 어플리케이션 개발을 해야하는 회사라면 분명 고민될만한 매력적인 옵션이다.

 

장점

  1. 안드로이드와 IOS의 동시 개발이 가능하다. 
    이건 몇번을 말해도 지나침이 없다. 물론 100% 완벽하게 지원한다고 얘기한다면 거짓말이다. 하지만 앱의 변화를 빨리 가져가야하고, 개발자의 몸값이 높아 여러명의 채용이 어려운 스타트업의 경우는 그런 문제를 감안하서라도 고민이 될 정도로 매력적인 요인이다.
  2. 진입 장벽이 낮다.
    Flutter를 배우고 앱을 만들기까지 걸리는 시간이 얼마나 걸릴까? 물론 어떤 앱이냐에 따라 그 시간은 다르겠지만, 안드로이드나 IOS, 심지어 웹 개발 보다도 훨씬 빠르게 앱을 만들어 낼 수 있다. 이부분에 있어서는 기존 다른 개발을 경험했던 개발자들이 더 크게 공감하는 사항이다.
  3. Hot Reload를 지원한다.
    내가 개발한 결과를 실시간으로 피드백을 받을 수 있는 기능이다. 정말 파괴적인 기능이지만 정작 Flutter로 개발을 처음 시작한 사람들은 당연히 지원되야 하는 기능 아니냐고 의문을 가지는 그정도의 기능이다. 다른 프레임워크에서 지원을 안하는 것은 아니나, Flutter의 Hot Reload 만큼 셋팅이 편하고 확실한 기능은 없다.
  4. Dart를 사용한다.
    이걸 장점으로 적을까 말까 고민했다. 하지만 내 생각에 이건 큰 장점이다. 덕분에 플러터는 굉장히 깔끔한 스타일의 코드 포맷팅을 제공하는데, 객체지향적이고 강타입 언어의 특징을 가지는 Dart는 정말 Flutter의 위젯과 찰떡이라고 할 수 있다.

단점

  1. 아직까지는 모바일 전용
    웹과 데스트탑을 지원한다고는 했지만, 웹은 아직 사용하기에 많이 느리고, 데스크탑은 베타버전이다. 분명 개발 진행상황에 따라 매력적으로 변해갈 부분이라 확신하지만, 현재로써는 '이것이 바로 플러터를 써야할 이유!' 라고 할만하지는 못하다.
  2. 상대는 구글이야!
    구글에서 Flutter를 개발하는데 이게 왜 단점인가 의아할 수 있다. 구글에 의존적인 서비스라 마음에 안든다고 하는 개발자도 있고, 서비스 종료를 꽤나 자주 보여줬던 구글이기에 언제 프로젝트가 접혀버릴지도 모른다는 위험성이 있는 것도 사실이다. 하지만 현재 Flutter가 2.5 버전까지 나온걸 생각해보면, 구글이 이 프로젝트를 쉽사리 포기할꺼 같지는 않다. 물론 아직 가야할 길이 멀기에 무슨 일이 일어날지는 장담할 수는 없지만, 나는 구글이 이 매력적인 프로젝트를 포기하지 않았으면 좋겠다.
  3. 그 외 사소한 단점들
    그 외로 플러터의 단점이라 지적되는 부분은 성능면에서 네이티브를 따라가기 어렵다는 이야기가 있는데, 이는 분명 사실이다. 하지만 모바일 기기의 환경이 앞으로도 좋아지면 좋아졌지, 퇴보하지 않을 꺼라는 생각에 점점 사소한 문제로 치부될 가능성이 있다. 앱크기가 네이티브보다 크다거나, 위젯트리가 깊어지면 코드 구조를 이해하는게 어렵다는 의견도 있으나... 플러터의 장점에 비하면 너무나도 사소한 문제고, 네이티브나 리액티네이티브라고 그런 문제를 가지지 않는것도 아니라는 변호를 해본다. 

 

이제 Dart의 특징 중 객체지향언어라는 점과 Null Safety을 중심으로 Flutter를 공부하는데 필수적인 프로그래밍 기본 내용에 대해 차근차근 알아가 보자.

반응형