01. variables

mhlee·2023년 11월 10일

dart

목록 보기
1/4

1. 변수 선언

type 지정

  • java와 비슷하게 타입 변수명 형태로 지정할 수 있다.

type 추론

  • var 변수명 형태로 지정할 수 있다.
  • dart는 type 언어이기 때문에 다른 타입의 변수를 할당할 수 없다.
void main() {
  var name1 = 'hello';
  name1 = 'world';
  print(name1);

  String name2 = 'hello';
  name2 = 'world';
  name2 = false; // 에러!!
  print(name2);
}

type 지정 vs type 추론

  • 일반적으로 로컬변수에는 var 사용이 권장된다.

  • 클래수 변수나 프로퍼티등은 type 지정이 권장된다.

2. dynamic 타입

  • 동적 타입 변수를 만들어 준다.

  • json 응답이나 타입을 지정하기 어려운 경우 사용하면 효과적이다.

  • 동적 타입이기 때문에 특정 타입으로 사용하려면 스마트 캐스팅을 사용해야 한다.

void main() {
  // var 선언부에 값을 할당하지 않으면 dynamic 타입으로 선언된다.
  var dynamicValue1;
  dynamic dynamicValue2;

  // 어떤 타입이라도 넣을수 있다.
  dynamicValue1 = 100;
  dynamicValue2 = 'Dart';

  // 타입이 다른 값을 넣을 수 있다.
  dynamicValue1 = 'dart';
  dynamicValue2 = false;

  // 스마트 캐스팅을 지원한다.
  if (dynamicValue1 is String) {
    print(dynamicValue1.length);
  }
}

3. null safety

  • kotlin과 비슷하게 타입뒤에 ?가 붙으면 nullable type이 된다.

  • null 체크도 비슷하게 ?. 연산을 사용한다.

void main() {
  String name1 = 'hello';
  String? name2 = null;

  print(name1.length);
  // ?. 연산자로 null 체크를 해야 한다.
  print(name2?.length);

  // name1은 nullable이 아니기 때문에 null을 할당할수 없다.
  //name1 = null;
}

4. final 키워드

  • kotlin의 val js의 const 같이 재할당이 불가능하게 하려면 final 키워드를 붙여야 한다.

  • final 변수명 , final type 변수명 모두 가능하다.

void main() {
  final String name1 = 'hello';
  final name2 = null;

  // 재할당이 불가능 하기 때문에 에러!!
  // name1 = 'world';
  // name2 = 'world';
}

5. late 키워드

  • late 키워드를 사용하여 초기화 지연이 가능하다.

  • late final 변수명 형태로도 사용 가능하다.

6. const 키워드

  • const를 사용하여 상수를 지정한다.

  • js의 const는 dart의 final과 같은 맥락이다.

  • final과 const의 차이는 컴파일 타임에 값이 지정된다는 것이다.

profile
삽질하는 개발자

0개의 댓글