본문 바로가기

IT 일기/Flutter!

Dart를 빠르게 알아보자 - 변수

728x90

개발 환경:

VScode에서 dart, flutter를 추가해줌.

 

1. Hello world!

void main() {
  print("Hello world");
}

 

2. 변수 선언!

void main() {
  var name = "gyugyu";
  print(name);
  String name2 = "hunger";
  print(name2);
}

=> 두 변수 선언 방법이 존재하고 둘은 다르지 않음. type-safe한 변수 선언을 지원하며 var name에서 자동으로 name의 타입이 String인걸 찾아줌. 단, 저 name에 이제 다른 타입은 넣을 수 없음

 

3. dynamic type!

void main() {
  var name;
  name = "nico";
  name = 12;
  print(name);
  name = "asdf";
  print(name);

  if (name is String) {
    print("it's string!");
  }
}

하나의 타입을 지정하지 않고 여러 타입이 될 수 잇는 타입을 dynamic type이라 한다. 위에서 처럼 var name;으로 변수를 생성만 하고 초기화를 해주지 않으면 해당 변수(name)은 dynamic type이 된다.

위와 같이 여러 타입(Int or String or ...)이 될 수 있고 아래에서 if문과 함께 타입을 확인하고 사용할 수 있다.

 

4. null safety!

void main() {
  String name = "gyu";
  name = null;
}

nico 변수는 String 타입만 갖을 수 있기 때문에 null값을 갖지 못해 위의 코드는 오류가 생긴다.

void main() {
  String? name = "gyu";
  name = null;
  if (name != null) {
    print(name);
  }
}

간단하게 타입의 마지막에 ?을 붙임으로 해당 변수의 타입으로 String,null 이 가능하다. 즉, 해당 변수가 null이 될 수 있는 가능성이 있다는 것을 알리는 것!

=> null을 참조할 경우 런타입에러로 프로그램이 멈추는 치명적인 오류가 생길 수 있는데 이를 방지하고자 만든것이다.\

void main() {
  String? name;
  name = null;
  name?.isEmpty;
}

이 코드는 위의 if()부분을 짧게 구현한 것이다. name?.isEmpty가 의미하는 바는 name 변수가 null이 아니라면 isEmpty를 수행해라 라는 의미이다. (근데 코드로 저 변수 값을 null이 아닌 값으로 초기화하면 컴파일러가 알아서 "이 타입은 null일 수 없다"라고 얘기해준다)

 

5. final!

void main() {
  final name = "gyu";
  name = "ds";
}

final을 통해 상수를 선언할 수 있음. 위 코드는 상수인 name을 수정하려고 해 오류가 발생함. 

 

6. const!

void main() {
  const name = 'gyu';
}

기능적으로 final과 크게 다르지 않지만 const는 컴파일 타임에 이미 지정된 상수의 의미를 가진다. 만약 앱스토어에 나의 앱을 올릴때 특정 값을 사전에 지정하고 싶다면 const를 사용하는 것이다. 즉, 사용자의 I/O에 의해 결정되는 값이라면 var 혹은 final을 사용하면 되는 것.

728x90