Flutter를 위한 Dart 기초 - 1️⃣ Dart와 변수

sxxng_ju·2023년 1월 24일
0

Flutter

목록 보기
2/5

Dart를 사용하는 이유

Dart는 Google이 개발한 언어로 크게 세가지의 특징을 가지고 있습니다.
1. Optimized for UI - UI에 최적화
2. Productive development - 생산적인 개발환경
3. Fast on all platforms- 모든 플랫폼에서 빠름

Dart를 개발하는 동안에 UI를 지속적으로 확인하기 위해서 Dart VM이 just-in-time compiler를 사용합니다. 덕분에 모든 코드를 컴파일하지 않아도 개발 단계에서 그때마다 확인할 수 있게 됩니다. 하지만 가상 머신을 사용하기 때문에 속도는 조금 느릴 수 있습니다. 그래서 코드를 완성하고 나서는 ahead-of-time compiler를 사용하여 native ARM 이나 x64 기계어로 컴파일을 합니다.

Flutter가 Dart를 고른 이유

Flutter가 Dart 언어를 선택한 첫번째 이유는 앞서 말한 just-in-time compile과 ahead-of-time compile이 둘 다 있기 때문입니다. 개발 도중 빠른 피드백과 최종 앱에서의 빠른 속도 둘 다 얻을 수 있습니다.

또 다른 이유는 Flutter와 Dart는 모두 구글이 만들었기 때문에 flutter를 위해 Dart를 최적화 할 수 있습니다. 다른 프레임워크와 언어들에서는 일어날 수 없는 Flutter와 Dart의 장점입니다. ahead-of-time compiler가 바로 그 예시입니다.

Dart Variables

변수를 생성하는데는 두 가지 방법이 있습니다. 첫번째는 명시적으로 변수의 타입을 지정해주는 것입니다. 두번째는 var 키워드를 사용하는 것입니다.

var & type

보통 관습적으로 함수나 메소드 내부에 지역 변수를 선언할 때 var를 사용합니다. 그리고 class에서 변수나 property를 선언할 때에는 타입을 지정해 줍니다. 또한 dynamic 타입을 통해 변수의 타입을 동적으로 지정할 수 도 있습니다. 변수의 타입 확인은 변수 is Type으로 확인합니다.

void main() {
	String name = "seungju";
    var age = 28;
    var dynamicVar;
    dynamicVar = "sj";
    dynamicVar = 1234;
    if(dynamicVar is String) {
    	print("dynamicVar는 문자입니다.")
    }
}

Null Safety

Dart에는 null safety라는 기능이 있습니다. null safety란 개발자가 null값을 참조할 수 없도록 하는 것입니다. 만약 null 타입을 참조하려고 한다면 런타임 에러가 발생합니다. 하지만 컴파일 전에 이 에러를 잡아내는 것이 좋습니다. 이것을 null safety가 해줍니다.

bool isEmpty(String string) => string.length == 0;

main() {
	isEmpty(null)
}

위의 코드에서 isEmpty의 parameter로 null을 전달했기 때문에 런타임 에러가 발생할 것입니다. null에는 length method가 없기 때문이죠. null 값을 참조하는 것을 미리 방지하기 위해서는 타입 뒤에 물음표를 붙여줌으로써 컴파일 이전에 알 수 있습니다.

void main() {
	String? name = "seungju";
    name = null;
    print(name.length)
}

위의 코드에서는 name.length 부분에 name 값이 null이 될 수 있다는 밑줄이 생길 것 입니다. 따라서 컴파일 이 전에 개발자는 이를 확인하여 개발할 수 있습니다. 대부분의 경우 변수는 null을 가질 수 없기 때문에 null을 참조할 수 있는 경우에만 물음표를 신경써주면 됩니다.

Final

앞서 알아본 타입들은 한 번 정의된 변수에 재할당이 가능합니다. 자바스크립트의 const와 같이 수정할 수 없는 변수를 선언하고 싶다면 final을 사용하면 됩니다.

void main() {
	final name = "sj";
    // final 키워드로 선언되었기 때문에 'test'로 재할당할 수 없습니다.
    name = 'test';
}

Late

late는 초기 데이터 없이 변수를 선언할 수 있습니다. 예를들어 API를 통해 받아온 데이터를 변수에 넣어줄 때 굳이 초기 데이터가 필요없다면 late를 통해 선언 후 데이터를 나중에 변수에 넣어주는 것입니다.

void main() {
	late final String name;
    // API 호출 중~~
    name = 'sj';
}

Const

Dart에도 Const 변수가 있다. 하지만 javascript의 Const와는 역할이 다르다. Dart의 상수는 앞서 언급한 final 키워드를 통해 선언하고 Const 키워드는 컴파일 단계에서 알 수 있는 값을 받아야 합니다. 즉 api나 다른 요청을 통해 받아오는 값이 아닌 개발 단계에서 미리 정의하여 사용하는 상수에 const 키워드를 사용합니다.

출처

노마드코더 Dart 강의
Dart 공식문서
Flutter 공식문서

0개의 댓글