[230304 - TIL] Dart - variables

Dongwoo Kim·2023년 3월 4일
0

TIL / WIL

목록 보기
90/113

1. 개요

이번 주말부터 본격적으로 Dart 공부를 시작했다. 궁극적인 목표는 Flutter를 이용해서 이번년 OKR중 하나인 지인들에게 자랑할 수 있는 나만의 애플리케이션 만들기 이다. 때문에 Flutter의 기본 언어인 Dart 공부를 먼저 시작했다.


2. Dart와 Flutter인 이유

나만에 애플리케이션을 만드는데 있어서 Dart와 Flutter을 선택한 이유는 궁금했기 때문이다. Dart와 Flutter은 같은 구글에서 개발했기 때문에 서로가 서로를 위한 기능을 추가할 수 있다는 특징이 있다. 예를 들어 Django는 python 기반 웹프레임워크이지만 python은 Django만을 위한 언어는 아니다. 따라서 Django의 특정 기능을 위해 python에 특정 기능이 추가되기를 기대하기는 어렵다. 하지만 Dart와 Flutter는 가능하다. 이런점에서 어떤 특징들이 있을지 궁금했고, 백엔드와 프론트엔드를 한가지 언어로 만들 수 있다는 것에도 큰 매력을 느낀 것 같다. 때문에 기존까지 한번도 사용해보지 않았던 새로운 언어를 배우면서 나에게 어떤 점은 맘에들고 어떤 점은 별로인지 느껴보고싶다.


3. variables

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 따라 할당하는 값이 달라짐)


참고

노마드코더 - Dart 시작하기 (무료강의)

profile
kimphysicsman

0개의 댓글