기술은 나의 도구

[노마드코더 플러터] Dart 소개와 Variables (변수)

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 을 사용해서 코드의 결과를 즉시 화면에 보여줌
      • 가상머신에서 동작하는 거라 조금 느림
  • 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
  • #노마드코더
  • #플러터
  • #Dart