본문 바로가기
Skills/Dart

[Dart문법] 변수

by Hoseok 2023. 2. 5.
728x90
반응형

구글이 개발한 객체지향 언어이다

Dart 설치 없이 코드 연습하는 사이트

https://dartpad.dev/

 

 

The Var Keyword

변수 타입을 지정할 수도 있고, var으로 쓸 수도있다.

void main() {
  int a = 10;
  var b = 100;
}

dart에서는 가이드를 제공하는데,

 

함수나 메소드 내부에 지역 변수를 선언할 때는 var을 사용.

class에서 변수나 property를 선언할 때는 타입을 지정.

 

그리고 변수는 데이터의 타입만 유지하면 업데이트 가능하다.

 

Dynamic Type

void main() {
  dynamic name; //var name; 도 가능.
  if(name is String) {
    name.length;
  }
}

타입을 모를 때, dynamic을 붙일 수 있다.

만약 데이터를 받아야 하는데, 데이터의 타입을 모른다고 치자.

 

dynamic을 이용하면 dart가 데이터 타입을 확인할 수 있게 도와준다.

이상적으로 쓰는 걸 추천하지 않지만, 꼭 필요할 때 사용하자.

 

Nullable Variables

null safety는 개발자가 null 값을 참조하지 없도록 하는 것.

 

만약, null 값을 참조하면 런타임 에러가 발생하는데,

이상적으로는 컴파일 전에 에러를 잡아내야 한다.

 

그러나, 컴파일러가 못 잡아내는 에러.

 

null 자체는 유용하기 때문에 null을 없애는 것은 좋은 해결책이 아니다.

⇒ dart에서는 어떤 변수가 null이 될 수 있음을 정확히 표시해야 함.

 

?만 넣어주면 된다.

void main() {
  String? name = 'hoseok';
  name = null;
  if(name != null) {
    name.isNotEmpty;
  }
}

?만 넣어주면 컴파일러가 null이 될 수 있음을 알게 된다.

 

기본적으로 dart의 모든 변수는 non-nullable.

?만 넣어주면 nullable로 변함.

 

즉, null safety는 어떤 변수, 혹은 데이터가 null이 될 수 있음을 명시하는 것.

void main() {
  String? name = 'hoseok';
  name = null;
  name?.isNotEmpty;
}

이렇게 단축 문법으로 사용할 수도 있다.

 

Final Variables

한 번 정의된 변수를 수정할 수 없게 만드려면 final을 사용하자.

void main() {
  final name = 'hoseok';
}
void main() {
  final String name = 'hoseok';
}

둘 다 사용 가능하나, dart가 알아서 추론하므로 final만 붙여도 된다.

 

Late Variables

late은 final이나 var 앞에 쓸 수 있는데,

초기 데이터 없이 변수를 선언할 수 있게 해준다.

 

예를 들어, api 요청으로 데이터를 받은 다음

그 데이터를 나중에 변수에 넣으면 된다.

void main() {
  late final String name;
  // api 요청을 받음
  name = 'hoseok';
}

값을 넣기 전에는 접근할 수 없다.

flutter로 data fetching을 할 때, 매우 유용하다.

 

Constant Variables

const는 javascript나 typescript에서의 const와는 다르다.

 

javascript나 typescript에서의 const는 final과 비슷하지만,

dart에서의 const는 compile-time constant를 만들어 준다.

 

const는 final처럼 수정될 수 없고,

가장 중요한 점은 compile-time에 알고 있는 값이어야 한다는 것.

 

어떤 값인지 모르고, 그 값이 api로부터 온다거나,

사용자가 화면에서 입력해야 하는 값이라면 그것은

final이나 var가 되어야 한다.

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

예를 들어, max_allowed_price 처럼 이미 값을 알거나, 정하고 있는 것들에

const를 써준다.

728x90
반응형

'Skills > Dart' 카테고리의 다른 글

Dart에서의 super 키워드  (0) 2024.02.07
final과 const의 차이  (1) 2024.02.07
Dart의 필수, 선택적, 명명 매개변수 알아보기  (0) 2024.02.06