본문 바로가기
Dart

[Dart] 기본 문법 Variables

by 루에 2023. 1. 10.
반응형

온라인 편집기 주소 : https://dartpad.dev

 

DartPad

 

dartpad.dev

 

기본 형태

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

 

Dynamic type : 타입이 정해지지 않은 변수 선언 및 사용

void main() {
  var name;	// or dynamic name; 으로 선언도 가능
  name = 'string';
  name = 12;
  name = true;
  
  if(name is String) {
  	// 문자열일 때
  } else if(name is int) {
  	// int형 숫자일 때 처리 등
  }
}

 

null safety : 변수 등에 null의 허용에 대한 식별자를 기재하여 사전에 npe를 차단

// null safety 하지 않은 코드
bool isEmpty(String string) => string.length == 0;
void main() {
  isEmpty(null);	// 에러 발생
}

// null safety
bool isEmpty(String string) => string.length == 0;
void main() {
  // 문자열 온리 가능 변수
  String name = 'name';
  name = null;	// 에러남. name은 문자열이어야함
  
  // 둘 다 되려면
  String? name2 = 'name';
  name2 = null;	// name2는 null일수도 있음
  
  // nullable variable을 null이 아닐 때만 사용하고 싶으면
  if(name2 != null) {
  	name2.isNotEmpty;
  }
  // 위 구문에 대한 단축문법
  name2?.isNotEmpty;
}

 

final 변수 속성 : 수정 불가 속성 부여

void main() {
  final name = 'name';
  name = 'adfsdf'; 	// 에러남. 수정불가속성변수
  
  // 타입 명시
  final String name2 = 'name2';
}

 

late 속성 : 변수값 할당을 나중에 함(api 응답 객체를 담는 등의 상황에서 유용)

void main() {
  late final name;	// 변수 선언을 나중에 함
  // api 호출 후 등 후에 값을 나중에 넣음
  name = 'response name';
  name = 'dddd';	// final 속성이기 때문에 에러 발생
  
  // 응용. 값이 할당되기 전에 사용하면 컴파일 에러 발생시켜 오류 방지
  late final name2;
  print('name2);	// 에러 발생. 값이 분명하지 않음!
  
}

 

const : 컴파일 타임에 알고 있어야 하는 수정 불가 속성

void main() {
  // 수정불가지만 final과 다르게 compile time에 알고 있어야 하는 값
  const name = 'name';
  name = 'safe';	// 에러. 수정불가
  
  const name2;
  // api call
  name2 = 'enfie';	// 에러. const는 컴파일 타임에 알고 있어야 함
}

 

반응형

댓글