이번 주말부터 본격적으로 Dart 공부를 시작했다. 궁극적인 목표는 Flutter를 이용해서 이번년 OKR중 하나인 지인들에게 자랑할 수 있는 나만의 애플리케이션 만들기 이다. 때문에 Flutter의 기본 언어인 Dart 공부를 먼저 시작했다.
나만에 애플리케이션을 만드는데 있어서 Dart와 Flutter을 선택한 이유는 궁금했기 때문이다. Dart와 Flutter은 같은 구글에서 개발했기 때문에 서로가 서로를 위한 기능을 추가할 수 있다는 특징이 있다. 예를 들어 Django는 python 기반 웹프레임워크이지만 python은 Django만을 위한 언어는 아니다. 따라서 Django의 특정 기능을 위해 python에 특정 기능이 추가되기를 기대하기는 어렵다. 하지만 Dart와 Flutter는 가능하다. 이런점에서 어떤 특징들이 있을지 궁금했고, 백엔드와 프론트엔드를 한가지 언어로 만들 수 있다는 것에도 큰 매력을 느낀 것 같다. 때문에 기존까지 한번도 사용해보지 않았던 새로운 언어를 배우면서 나에게 어떤 점은 맘에들고 어떤 점은 별로인지 느껴보고싶다.
1. var
- 타입을 따로 지정안해줘도 컴파일러가 타입을 추론
but 수정할 땐 같은 타입으로 수정해야함- 지역변수 선언시 사용
2. 타입 지정
- String 과 같이 변수 선언시 타입 지정 가능
- class, property 변수 선언시
3. dynamic
- var로 변수 선언후 초기화하지 않은 경우
- var 변수를 null로 초기화한 경우
- dynamic으로 선언한 경우
- 타입에 제한받지않음
var foo; foo = "dongwoo"; foo = 12; dynamic foo; if(foo is String){ ... }
4. null safety
// without null safety bool isEmpty(String string) => string.length == 0; main () { isEmpty(null); // NosSuchMethodError } ``` ```dart String foo = "dongwoo"; foo = null // CompileError String? foo = "dongwoo"; foo = null; foo.isNotEmpty // CompileError if (foo != null) { foo.isNotEmpty; } foo?.isNotEmpty;
5. 중복 선언 불가능
var foo = "dongwoo"; foo = false; // Error var foo = false; // Error var foo = "string" // Error
6. final
- javascript 의 const와 같이 값을 초기화하면 변경할 수 없음
- 선언 이후 나중에 할당해도 됨
- var 변수와 사용 불가능
final String foo = "dongwoo"; foo = "woodong"; // Error final String bar; bar = "dongwoo"; bar = "woodong"; // Error final var foo2; // Error
7. late
- 선언만 하고 나중에 값을 할당할 때 사용
- 할당하기전에는 변수 사용 불가능
- 선언하면서 할당해도 상관없는 듯
// var 변수는 선언만해도 사용가능하지만 // late와 함께사용하면 에러발생 var foo; print(foo); // null foo = dongwoo; print(foo); // dongwoo late var bar; print(bar); // Error // 타입 지정시 late 없어도 할당 전 사용시 에러 String foo2; print(foo2); // Error late String foo2; print(foo2); // Error
// late와 final를 같이 사용하는 경우 // 특정 api를 통한 응답데이터를 할당할 경우 late final String foo; // some request.. foo = ((some requset data...))
8. const
- compile-time constant 생성
compile-time constant : 컴파일 단계에서 알고있어야할 상수 값- 완전 하드 코딩 값
- ex) const vs final
const : API키, 요청 url 등 (코드를 실행하는데 변하지않음)
final : API 응답값 (변하지않는 상태로 관리하지만 API 따라 할당하는 값이 달라짐)