카테고리 없음

Dart 시작하기 - #1-1 VARIABLES 변수 (#1.1 ~ #1.3)

샤크데브 2025. 7. 15. 14:16

 

#1.1 The Var Keyword

 

Dart의 변수 선언은 다음과 같다.

void main() {
  var name = '다트';
}

 

Dart는 변수의 타입을 따로 설정하지 않아도 되는데, 왜냐하면 dart 컴파일러는 name이 Sting(문자열)이라는 것을 알고 있기 때문이다.

 

변수는 업데이트 가능한데, 이 경우에는 본래의 타입과 일치 해야한다. 

 

void main() {
  var name = '다트';
  name = 1;
}

 

이 경우에 name은 본래 String이고 1은 정수형이기 때문에 작동하지 않는다. 

같은 원리로 bool, true, false 모두 입력이 불가능하다.

 

같은 문자열로 (name = 'dart';) 변경하는 경우만 가능하다.

 

 

변수를 선언하는 다른 방법은 직접 타입을 지정해주는 방법이다.

 

void main() {
  String name = '다트';
  name = 'dart';
}

 

이렇게 코드를 짜도 정상적으로 작동한다.

 

 

그렇다면 각각 언제 사용해야 하는 걸까? 

 

함수나 메소드 내부에 지역 변수를 선언할 때 -> var

 

class에서 변수나 property를 선언할 떄 -> 타입 지정

 

 

#1.2 Dyanmic Type

 

dynamic은 여러가지 타입을 가질 수 있는 변수에 쓰는 키워드. 

ㄴ사용되는 게 추천되지는 않지만 때때로 아주 유용하다.

 

void main() {
  var name;
  name = 'dart';
  name = 12;
  name = true;
}

 

위와 같이 변수에 아무 값도 지정하지 않았을 때, 다음과 같이 넣어주는 것이 가능하다.

 

void main() {
  dynamic name;
  name = 'dart';
  name = 12;
  name = true;
}

 

var 말고 dynamic으로 변수를 선언하는 것도 가능하다.

 

 

 

dynamic으로 변수가 선언되면, 타입을 알 수가 없어 메소드가 거의 뜨지 않지만, 위와 같이 name의 타입이 String으로 정의되었을 때에는 name.에 다양한 옵션을 자동완성 해준다.

 

 

#1.3 Nullable Variables

 

null saftey는 개발자가 null 값을 참조할 수 없도록 한다. (null 값을 참조하게 되면 런타임 에러가 뜬다)

 

 

//Without null saftey:
bool isEmpty(String string) => string.length == 0;

main(){
  is Empty(null);
}

 

null saftey가 없는 경우

 

String을 받아서 true나 false를 리턴하는 함수가 있다. (String의 length가 0인지 아닌지를 판별)

이 코드를 실행하면 런타임 에러가 나고, 에러는 NoSuchMethod이다.

 

String을 보내야 하는 값에 null을 보냈기 때문이다.

null을 보내준 후에는 string의 length라는 속성에 접근하는데,

지금 string은 null이기 때문에 length라는 속성이 없어서 에러가 발생한다.

 

void main() {
  String nico = 'nico';
  nico = null;
}

 

예를 들어 위와 같은 코드를 작성 했을 때, nico는 string 타입을 가지고 있어 null에서 오류가 난다.

이 경우 nico라는 변수가 string과 null 모두를 가지게 하는 방법이 있는데,

 

void main() {
  String? nico = 'nico';
  nico = null;
}

 

String? 를 사용하면 된다. 이 경우 nico가 String일 수도, null일 수도 있다는 것을 dart도 알게 되기 때문이다.

 

dart에서 null saftey는 어떤 변수, 혹은 데이터가 null이 될 수 있음을 명시하는 것을 말한다.

 

※ dart의 변수는 기본적으로 nullable이 아니다.