Languages/Dart

[노마드코더] #2 Variables

성중 2023. 1. 8. 20:53

Hello World

void main() {
  print("hello world");
}
  • main 함수는 모든 Dart 프로그램의 Entry point
  • 프로그램 실행 시 main 함수에 쓴 코드들이 호출 (없다면 실행 불가)
  • 세미콜론(;)이 필요 (일부로 안 쓸 때도 있어 formatter가 붙여주진 않음)

 

The Var Keyword

void main() {
  var food1 = "pizza"; // 방법1
  String food2 = "chicken"; // 방법2
  food1 = "hamburger";
}
  • var 키워드 or 타입을 직접 지정해 변수 선언
  • var 키워드의 경우 Dart가 자동으로 타입을 추론
  • 값의 업데이트는 같은 타입으로만 가능
  • 함수나 메소드 내부에 지역 변수를 선언하는 경우 ~ var 키워드
  • class에서 변수나 property를 선언하는 경우 ~ 타입을 직접 지정

 

Dynamic Type

void main() {
  dynamic name1; // 방법1
  var name2; // 방법2
  
  name1 = 123;
  name1 = true;
  name1 = "yee";
  
  if (name1 is String) {
    print(name1.length);
  }
}
  • dynamic 키워드 or 초기화 없이 변수 선언
  • dynamic 타입의 변수는 모든 타입으로 업데이트 가능
  • 조건문으로 타입을 확인해줘야 해당 타입의 기능 사용 가능
  • 변수의 타입을 알 수 없거나 꼭 필요한 경우에만 사용

 

Nullable Variables

void main() {
  String? name = "hello";
  name = null;
  
  if (name != null) name.isNotEmpty; // 방법1
  name?.isNotEmpty; // 방법2
}
  • Dart 버전이 업데이트되면서 추가된 기능
  • Dart는 null 값 참조를 예방하는 null safety 지원
  • 타입 뒤에 ?를 붙여 변수가 null 값이 될 수도 있음을 명시
  • 기본적으로 모든 변수는 non-nullable
  • null 이 아닌 경우에만 실행하는 optional chaining 지원

 

Final Variables

void main() {
  final name = "pizza";
  name = "ham"; // 수정 불가
}
  • 변수를 final로 선언하면 수정 불가 (JS const와 비슷)

 

Late Variables

void main() {
  late final String name;

  print(name); // name 변수에 접근 불가
}
  • var 혹은 final 변수를 초기화 없이 선언 가능 + 값을 할당할 때까지 접근 불가
  • 값을 나중에 할당하고 수정될 수 없도록 late final을 data fetching에 주로 사용

 

Constant Variables

void main() {
  const name = "tom"; // 컴파일 시점에 바뀌지 않는 값
  final username = fetchAPI(); // 컴파일 시점에 바뀌는 값
}
  • Dart의 const는 compile-time-constant (JS의 const와 다름)
  • 컴파일 이전에 이미 확정된 상수 값만 const로 선언 (하드 코딩)
  • API로부터 받아오거나 사용자 입력 값은 final로 선언

 

본 내용은 노마드코더의 'Dart 시작하기'를 바탕으로 작성되었습니다

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

[글또] JavaScript 개발자와 Dart 찍먹하기  (0) 2023.02.11
[노마드코더] #5 Classes  (0) 2023.01.12
[노마드코더] #4 Functions  (0) 2023.01.09
[노마드코더] #3 Data Types  (0) 2023.01.09
[노마드코더] #1 Introduction  (0) 2023.01.04