다트(Dart)언어

다트(Dart) : Deep Dive into Variables, Main Function and Null Safety

백코딩 2023. 9. 10. 15:04
728x90

main 함수는 모든 Dart 프로그램의 Entry point이기 때문에 아주 중요하다.

파이썬과 비슷한 점이 있지만 파이썬과 다르게 꼭 세미콜론(;)을 써 줘야 한다. 빼먹으면 프로그램이 컴파일 되지 않는다.

typescript나 javascript을 사용하다가 왔다면 세미콜론을 사용하지 않는 것에 익숙할 수 있다. formatter나 VSCode 같은 프로그램이 알아서 달아준다. dart에는 자동으로 달아주지 않는다.

 

main함수는 모든 Dart프로그램의 Entry point이다. main 함수에서 쓴 코드가 호출된다. (만약 main이 없다면 실행이 되지 않는다.) 

dart는 자동으로 세미콜론을 붙여주지 않기 때문에 직접 붙여야 한다.( 일부러 세미콜론을 안 쓸때가 있기 때문이다.)

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

값을 업데이트를 할 때는 변수의 본래 타입과 일치해야 한다.

변수를 만드는 방법은 두가지다. 

명시적으로 변수의 타입을 지정하거나 var 키워드를 이용하는 것이다.

void main(){
  var name = 'Seung';  // 방법 1
  String age = '25';  // 방법 2
  name = 'Baek';
  age = '27';

  print(name);
  print(age);
}

 

함수나 메소드 내부에 지역변수를 선언할 때는 var를 사용하고 class에서 변수나 property를 선언할 때는 타입을 지정해준다.

 

dart는 모든 타입에 대해서 멋진 속성들을 가지고 있다.

Dynamic 타입

여러가지 타입을 가질 수 있는 변수에 쓰는 키워드이다. (해당 변수의 타입을 알 수 없을 때 주로 사용)

변수를 선언할 때 dynamic을 쓰거나 값을 지정하지 않으면 dynamic 타입을 가진다.

void main(){
  dynamic name;
}

dynamic 타입은 대표적으로 타입을 알기가 힘들 때 사용한다. 예를 들어 json을 작업할 때 같은 경우다.

하지만 dynamic 타입은 다양한 타입을 가질 수 있기 때문에 '정말 필요할 때만'사용해야 한다.(위험 방지)

 

런타임 에러는 사용자가 앱을 사용하던 중에 뜨는 에러라는 뜻이다.

 

dart의 null safety라는 건 어떤 변수, 혹은 데이터가 null이 될 수 있음을 명시하는 걸 말한다.

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

null safety는 개발자가 null값을 참조할 없게 하는 것이다.

String뒤에 ?를 붙여줌으로서 chan이 String 또는 null 될 수 있다고 명시해준것입니다. 기본적으로 모든 변수는 non-nullable(null이 될 수 없음)이다.

dart의 변수는 기본적으로 nullable이 아니란 것만 기억해주세요. nullable로 만들고 싶다면, 꼭 물음표를 넣어줘야 한다.

 

final 변수

var 대신 final로 변수를 만들게 되면 이 변수는 수정할 수 없게 된다.(딱 한 번만 설정될 수 있음) 자바스크립트의 const랑 비슷하다.

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

 

late는 final이나 var 앞에 붙여줄 수 있는 수식어다. late는 초기 데이터 없이 변수를 선언할 수 있게 해준다. 변수를 만드는데 데이터가 없는 거다.

void main(){
  late final Sting name;
  // do something, go to api
  name = 'chan';
  print(name)
}

flutter로 data fetching을 할 때 정말 유용하다. flutter에서 API와 작업할 떄 많이 보게 될 것이다. late 변수를 만들고 API에 요청을 보낸 뒤에 AP에서 값을 보내주면 그걸 late 변수에 넣어주는 거다.

 

dart의 const는 javascript나 typescript와 다르다. javascript나 typescript의 const는 dart의 final과 비슷해 dart에서 const는 compile-time constant를 만들어 준다.

const는 컴파일 할 때 알고 있는 값에 사용하는 거다. 앱스토어에 앱을 올리기 전에 알고 있는 값이라는거다. 만약 앱스토어에 앱을 올리기 전에 값을 알고 있다면 const가 될 것이고 어떤 값인지 모르고, 그 값이 API로 부터 온다거나 사용자가 화면에서 입력해야 하는 값이라면 그건 final이나 var가 되어야 한다.

void main(){
  const name = "tom"; // 컴파일 시점에 바뀌지 않는 값
  final username = fetchAPI(); // 컴파일 시점에 바뀌는 값
}

const : 컴파일 시점에 바뀌지 않는 값(상수)

final : 컴파일 시점에 바뀌는 값(API에서 받아온 값, 사용자 입력값)

 

정리하자면

final : 값을 재할당하지 못하는 변수를 만든다.

dynamic type : 어떤 타입의 데이터가 들어올 지 모를 때 사용함

const : 컴파일 할 때 값을 알고 있는 변수

final : 런타임 중에 만들어질 수 있는 변수

late : final, var, String 같은 것들 앞에 써줄 수 있는 수식어로서 어떤 데이터가 올 지 모를 때 사용한다.

 

 

728x90

'다트(Dart)언어' 카테고리의 다른 글

다트(Dart) - FUNCTIONS  (0) 2023.09.11
다트(Dart) - 데이터 타입(DATA TYPES)  (0) 2023.09.10
다트(Dart) 이해 및 개념 - IT  (0) 2023.09.07