[Dart] 변수 타입 알아보기

천우산__ ㅣ 2024. 8. 26. 21:17

기존에 웹으로 만들던 기능을 앱으로 바꿔서 출시를 하고 싶다는 생각을 했다.

하나의 코드로 안드로이드, 아이폰 모두 적용 가능하게 만들고 싶었고, Flutter 와 React Native 중 어떤 것을 사용할까 고민한 결과

다양한 언어를 경험해 보자는 차원에서 Flutter 로 결정하게 되었다.

Flutter 는 Dart 기반으로 만들 수 있어서, Dart 를 먼저 조금이라도 공부한 후에 Flutter 작업을 하기로 했고

이번 글에서는 Dart 언어의 변수 선언 방법에 대해서 알아보고자 한다.

 

1. 공통 적용 사항

Dart 언어는 항상 main 이라는 이름을 가진 함수를 가장 최상위 레벨에서 동작시켜야 한다.

또한, 코드가 끝나는 부분에는 항상 세미 콜론(;) 이 있어야 한다.

void main() {
  print("hello world!");
}

 

 

2. 정적 타입 변수 선언

'var 변수명 = 값 '으로 변수를 선언하거나 '변수 타입 + 변수명' 으로 변수를 선언할 수 있다.

두 방법 중 어떤 것을 사용 해도 무방한 것으로 보인다. 단, 위의 방식으로 변수를 선언한 경우에는

해당 타입으로만 변수 값이 변경 가능하며, 다른 타입으로는 변경할 수 없다.

void main() {
  // 아래 방법 중 자유롭게 사융 가능
  var myName = "chunws";
  String myName2;
  String myName2 = "chunws";
  
  
  // 각 케이스 별 가능 & 불가능 여부
  myName = true; // 타입이 달라서 불가능
  myName = "another" // 타입이 같아서 가능
}

 

 

3. 동적 타입 변수 선언

다양한 타입을 받는 변수를 사용하고 싶은 경우에는 아래와 같이 선언한다.

'var 변수명' 또는 'dynamic 변수명'

선언 후 최초 값은 null 이 된다.

void main() {
  var myName;
  dynamic myName2;
  
  
  print(myName); // null
  print(myName2); // null
}

 

 

4. 수정이 불가능한 변수 선언

JavaScirpt 의 const 와 같이 수정이 불가능한 변수 선언도 가능하다.

'final 변수명 = 값' 

선언 이후 수정이 불가능하므로 선언 시 값을 넣어주어야 한다.

void main() {
  final maName = "chunws";
  
  myName = "chunws2"; // 실행 불가능
}

 

 

5. 지연된 변수 선언

사용할 것이 확실하지만, 실행되는 현재 시점에서는 어떤 데이터가 있을지 모르는 상황이라면?

예를 들어, 사용자 입력을 받아 API 요청으로 값을 가져온다면 그 응답 값이 저장될 변수는 사용할 것이 분명하지만

유저가 어떤 값을 입력 할 것인지 알 수 없으므로 변수 값 할당을 잠시 유예해야 한다.

이 때 사용하는 것이 'late + 변수 선언'

이 경우에는 수정이 불가능한 final 에도 적용 가능하다. 단, 해당 방법으로 final 변수 값을 할당 한 후에 변경은 불가능하다.

void main() {
  late final myName;
  myName = "chunws";
  
  print(myName); // chunws
  
  myName = "chunws2"; // 변경 불가능
}

 

 

6. Nulll 값 이 가능한 변수 선언

dynamic 으로 선언하지 않는 한 변수는 특정 타입만을 받을 수 있도록 되어있다.

예를 들어'String myName' 으로 변수를 선언한 후, print 를 통해 변수를 출력하면 변수에 값을 할당하지 않았으므로 에러가 발생한다.

구체적으로 어떤 경우에서 사용되는지는 모르겠지만, 이런 경우를 대비해서 null 값을 가질 수 있는 변수명을 선언하는 방법이 있다.

'타입 + ? + 변수명' 

이렇게 선언하는 변수는 null 값을 가질 수 있다는 의미가 되고, 값을 할당하지 않은 상태에서 출력 코드를 작성하면

에러가 발생하지 않고 null 이 출력된다.

// Case 1
void main() {
  String myName;
  print(myName); // 값을 할당하지 않아서 에러 발생
}


// Case 2
void main() {
  String? myName;
  print(myName); // null 출력
}

 

지금까지 배웠던 언어들은 변수 선언 후 값 변경 시 타입 제한이 있지 않았는데

Dart 는 특수한 경우를 제외하면 변수의 타입이 변경되는 것을 막는 다는 점이 인상적이다.

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

[Dart] 함수 활용 방법  (0) 2024.08.28
[Dart] 자료형과 자료구조 알아보기  (1) 2024.08.27