Dart 문법공부 시작
Flutter 개발환경 구축이 끝났으니,
본격적으로 다트언어 공부를 시작하려한다.
하지만 시작에 앞서 다트가 어떤 언어인지
대충이라도 알고 가면 좋겠다는 생각이 들었다.
특히, 기존에 주로 사용하던 코틀린과 비교하면 좋을것 같다.
Dart vs Kotlin
https://blog.codemagic.io/dart-vs-kotlin/
여기 링크에서 정말 상세하게 잘 비교해주었다.
따라서 이글을 간단히만 요약해본다.
모두가 알다시피 코틀린은 안드로이드 앱개발,
다트는 Flutter앱개발을 타겟팅한다.
범위를 확장하면, 코틀린의 경우 안드로이드 앱이
아니더라도, java기반으로 구동하는
서버등에도 적용할 수 있는 반면, 다트는 Flutter외에는
사실 쓸 곳이 없다.. 현재로써는 Dart = Flutter인 것.
코틀린은 2016년 1.0 버전이 출시해 얼마 후 바로 안드로이드
공식 언어로 구글이 밀어주었다.
다트는 2013년 출시되었으나 인기가 없어 사장되었기에
Flutter의 공식 릴리즈인 2018년 12월부터 활용되었다고
볼 수 있다.
따라서 코틀린 언어 관련 정보가 훨씬 많을 것으로 보인다.
두 언어 모두 정적 타입의 언어이다.
코틀린이 동적 타입을 제공한다고는 하나,
앱개발에 있어서는 결국 JVM을 써서인지
활용하지 못한다. 반면 다트는 원한다면 동적타입을
활용할 수 있다고 한다.
(개인적으로 나는 정적타입 언어가 편해 안쓸듯하다)
기본적인 타입은 아래와 같다.
int: 정수형
double: 실수형
num: int, double을 모두 포함
bool: true, false
String: 문자열
List: 리스트
Set: 중복을 허용하지 않고 순서가 없는 집합
Map: key : value쌍 (json이나 파이썬 dict에 대응)
군더더기 없이 깔끔하다.
코틀린에서 mutable list랑 list 구분하는게 귀찮았는데
다트에서는 그런게 없어보여 좋다.
또 파이썬의 Set이나 Dictionary를 겨냥한 듯 보이는
타입도 있어 흥미롭다.
코틀린은 var, val, const val 등으로 변수를 정의한다.
다트에서 이는 다음과 같이 대응된다.
개인적으로 타입을 선행으로 적는다는 점은 생소하지만,
그점 말고는 큰 차이가 없어보인다.
개인적으로 다트 언어에서 가장 아쉬운 부분이다..
코틀린, 스위프트에서는 세미콜론(;)을 적지 않아도 돼서
굉장히 편했는데, 다트에서는 반드시 기입해야한다..
이걸로 에러 정말 많이 낼 듯하다.
다트의 for문은 코틀린에 비해 조금 더 C스럽고,
다트의 swich문은 Swift스럽다는게 차이점이겠다.
다트의 메소드 표현 방식은 선행 타입이라 그런지
얼핏 보면 자바 느낌이 있다.
그런데 또 람다 함수는 자바스크립트랑 비슷하다ㄷㄷ
(뭐 좋은거 가져다가 잘 쓰면 좋지)
클래스 자체는 별반 다를게 없다.
추상 클래스도 제공해주니 규칙 만들 때 좋을듯
하지만.. 코틀린의 data class나 sealed class와 같은
응용 클래스는 없어보여 아쉽다.
물론 아직 공부하기 전이기에 내가 모르는 거겠지..??
무튼 이 블로그 글만 봤을때는 그렇다.
둘다 지원한다!!
걸어둔 링크에서는 베타상태라고 하지만,
이는 2년전 포스팅으로 현재는 지원한다ㅎㅎ
한때 다트에서 지원이 안됐었다는데 없었으면
진짜 개발하기 어려웠을 듯 하다ㄷㄷㄷ
역시 플러터를 위해 다트 언어를 바꾸는 구글 클라스..
코틀린에서는 coroutine을 필두로 한 비동기 작업을
쉽게 할 수 있었다. 이를 활용한 Flow등을 함께 사용한다면
가독성있는 비동기 작업 코딩이 가능했다.(콜백 지옥 방지)
링크에서 설명하는 바에 따르면, 다트에서도
async await 방식을 활용할 수 있는것 같다.
표현이 흥미로운데, 코틀린과 비교하면 이렇다.
// kotlin
suspend fun foo(var1: String): Boolean {
return ~~~
}
// dart
Future<bool> foo(Stirng var1) {
return Future.~~~
}
맞는 비교인지는 모르겠다.
기존 코틀린에서 suspend function으로 쓰던것을
다트에서는 Future라는 독특한 표현을 쓰는것 같다.
이부분은 자세히 공부해봐야겠다.
언어에 대한 비교보다는 기존 안드로이드와 Flutter 비교인
부분을 +a로 따로 분류해봤다.
기존 안드로이드 디자인은 xml을 활용한 기존 방식과
jetpack compose를 활용한 선언형 방식
두가지를 모두 사용할 수 있다.
기존 카페자리앱은 100% jetpack compose로 디자인했었다.
플러터는 선언형 UI의 원조격으로, jetpack compose와
어떻게 다를지 기대되는 부분이다.
jetpack compose, swiftUI 모두 preview를 제공해준다.
하지만 개발하다보면 앱이 무거워지고 각 화면 간
관계가 복잡해져 거의 제대로 활용하지 못했다.
(하려고 해도 각종 에러로 못썼다..)
플러터로 개발해본 사람들이 입을모아
hot reload 기능을 장점으로 꼽은만큼
여기서는 제대로 활용할 수 있을지 기대가 된다.
마치며
무작정 배우고 보는게 아니라 간략하게나마 정리해보고
가는게 처음인데, 생각보다 의미있는 경험인 것 같다.
이제 배경지식은 대충 쌓았으니 본격적으로 문법 공부부터
해봐야지.