오답노트

[Dart] 기본적인 자료형 본문

Dart

[Dart] 기본적인 자료형

권멋져 2023. 5. 9. 18:16
 

Dart 시작하기 – 노마드 코더 Nomad Coders

Flutter 앱 개발을 위한 Dart 배우기

nomadcoders.co

기본 문법

기존에 C,C++의 감각으로 해야한다. 일부 사용자는 JS와 가깝다고 말한다. 하지만 난 JS와 친하지 않아 C,C++ 처럼 사용하려 노력하고 있다.

 

void main()
{
    print('hello world');
}

기본적으로 main 함수에서 호출되며 코드의 마지막은 항상 세미콜론(;)으로 끝나야한다.

자료형을 보면 생각보다 엄격한 언어라는 생각이 든다.

 

VARIABLES

var

void main() {
  var name = 'name'; // 지정한 변수는 자료형 변경 불가능
  name = 'ksw'; // string
  
  // 함수나 메소드 내부에 지역 변수를 선언할 때 사용
  // class의 속성으로는 직접 지정
    
  String name_str = 'name';
  
}

var는 초기화하는 자료형을 따라간다. 하지만 한 번 정해진 자료형은 나중에 바꿀 수 없다.

이외에 String, int, double 등 자료형을 직접 선언해서 사용할 수 있다. 이런 자료형은 모두 클래스로 이루어져있다.

특히 숫자와 관련된 자료형은 num이라는 부모 클래스를 가지고 있다.

 

dynamic

void main() {
  var name; // 초기화 하지 않으면 Dynamic Var
  name = 'string';
  name = 1;
  name = true;
  
  dynamic dy_var;
  if (dy_var is String) // 조건문에서 확인했기 때문에 조건문 안에서는 해당 자료형
  {
    // dy_var은 String
  }
  
  if (dy_var is int)
  {
    // dy_var은 int
  }
  
  // 강력하지만 정말로 필요할 때만 쓰도록 하자.
  
}

dynamic은 var와 마찬가지로 여러가지 자료형을 가질 수 있는 변수에 쓸 수 있다.

눈여겨볼 점은 var 타입의 변수에 아무것도 초기화하지 않으면 dynamic형으로 인식한다.

dynamic은 var와 달리 여러 자료형의 데이터를 받을 수 있다. 하지만 그만큼 사용에 주의해야한다.

 

그리고 이런 주의사항 때문에 dart에서는 사용자를 배려해준다.

if 문으로 해당 자료형을 확인한다면 if문 안에서는 자료형에 대한 메소드를 사용할 수 있도록 해준다.

 

 

Nullable Variables

void main() {
  // Null safety : null을 참조하면 런타임 에러 발생
  String? name = 'name';
  name = null;
  //name.length; error
  if (name != null){ //dart는 name이 null 이 아니란 것을 알기 떄문에 error X
    name.isNotEmpty;
  }
  
  // if문 대신 아래처럼 사용 가능
  name?.isNotEmpty; // ?는 null이 아니라면
  
}

처음에서 말했듯 dart는 생각보다 엄격한 언어다. 그래서 Null safety를 통해 사용자가 Null인 변수에 참조할 수 없도록 한다.

 

하지만 이전 목차에서 if문으로 자료형을 확인해서 메소드를 사용한 것처럼, if문으로 null이 아님을 확인하면 정상적으로 변수를 사용할 수 있다.

그리고 이를 더 간결하게 사용하기 위해 변수명 뒤에 '?'를 붙히면 if문으로 null이 아님을 확인한 것과 같다.

 

final

void main() {
  final name = 'name'; // 상수 선언
  //name = 'ksw'; // 변경 불가능
}

final은 상수다. 초기화된 자료는 변경할 수 없다.

 

late

void main() {
  late final String name;
  // 무언가 데이터를 받아온다.
  //print(name); 할당되지 않아 print error -> 실수를 방지
  name = 'name'; // 나중에 값을 넣을 수 있음
}

이전 목차의 final 상수는 무조건 초기화를 해줘야한다. 하지만 필요에 의해서 나중에 입력될 데이터로 프로그램 전체에 사용될 때, 상수가 아닌 변수로 사용해야만 한다.

 

이런 불편함을 late가 해결해준다. 상수라도 나중에 입력 받을 수 있도록 해준다.

 

const

void main() {
  const API = '1234';
  // 컴파일 타임 상수
  // 컴파일 타임에 알고있어야 하는 상수
  //const return_fun = func();
  // 컴파일 타임에 할당되는 것이 아니면 오류 발생
}

아니 이전 목차에서 final이라는 상수를 배웠는데 const라는 상수가 또 등장한다고?!

final은 변수처럼 사용할 수 있는 '여지'가 있다면

const는 얄짤 없이 코딩하는 순간부터 입력되야한다. 컴파일 타임에 값이 할당되어 있지 않으면 오류를 일으킨다.

* 컴파일 타임 : dart 코드를 컴파일하는 동안을 컴파일 타임이라고 한다.

'Dart' 카테고리의 다른 글

[Dart] 함수  (0) 2023.05.09
[Dart] Data Type  (0) 2023.05.09