Dart 소개
- Dart 는 UI 에 최적화 되어 있다.
- Dart 는 두개의 컴파일러 (Dart Web, Dart Native) 를 갖고 있다.
- Dart Web : dart to javascript compiler
- Dart Native : dart to multiple architecture of different CPU (IOS, Android, Windows, Linux, Mac & IOT ..) compiler
- Compile 방식
- AOT (ahead-of-time)
- 컴파일을 먼저하고, 그 결과인 바이너리를 배포
- 개발이 완료가 되면 사용
- JIT (just-in-time)
- 개발중일 때만 사용
- dart VM 을 사용해서 코드의 결과를 즉시 화면에 보여줌
- 가상머신에서 동작하는 거라 조금 느림
- AOT (ahead-of-time)
- Null safety 를 도입
- Flutter 에서 Dart 를 도입한 이유
- AOT 와 JIT 둘다 제공
- 구글이 Flutter 와 Dart 를 만들었음 (ex. Flutter 를 위해 Dart 를 최적화할 수 있음)
Dart Playground
Variables (변수)
-
Dart 는 항상 void main() 에서 시작한다.
-
문장은 항상 세미콜론(;) 으로 끝난다.
-
변수를 수정할 때는 항상 같은 타입으로만 가능하다.
// 관습적으로 함수나 메소드 내부의 지역 변수를 선언할 때는 var 를 사용 // var 를 쓰든 타입을 지정하든 상관없지만 관습을 따름 var name = 'moz'; // 타입 추론 name = 1; // Error
-
명시적으로 타입 지정하는 것도 가능하다.
// class 에서 변수나 property 를 선언할 때는 타입을 지정 // var 를 쓰든 타입을 지정하든 상관없지만 관습을 따름 String name = 'moz';
-
dynamic 여러가지 타입을 가질 수 있는 변수에 쓰는 키워드 (추천하지 않지만 유용한 경우가 있음)
var name; // 값이 할당되지 않았으므로 name 은 dynamic 타입을 가지게 됨 name = 'moz'; // OK name = 123; // OK name = true; // OK
-
null safety
-
개발자가 null 값을 참조할 수 없도록 해서 컴파일 전에 null 에러를 잡기 위함
-
null 이 될 수 있는 변수 지정
String name = 'moz'; name = null; // Error String? name = 'moz'; // null safety name = null; // OK name?.isNotEmpty; // name 이 null 이 아니면 isNotEmpty 수행
-
-
final 키워드
- 재할당하지 못하는 변수를 정의함 (const 와 다름)
- 런타임에 할당 가능
final name = 'moz'; name = 'tiq'; // Error final String name = 'moz'; // Type 지정도 가능
-
late 는 초기 데이터 없이 변수 선언을 가능하게 함
late final String name; print(name); // Error (값이 할당되지 않은 상태에서 접근할 수 없음) // API 를 호출하여 데이터를 받아온 후 아래 단계 진행 name = 'moz'; name = 123; // Error
-
const 키워드는 컴파일 타임에 이미 할당해서 (알고 있는 값) 사용
-
javascript 의 const 는 Dart 의 final 과 유사
-
런타임에 할당 불가
const API = 'https://api.com/api'; const API = fetchApi(); // Error final API = fetchApi(); // OK
-