[Dart] 1. Variables (변수 선언하기)

yunulog·2023년 1월 2일
0

Dart

목록 보기
1/5
post-thumbnail

Flutter를 위한 첫걸음, Dart

0. Hello World

main 함수는 모든 Dart 프로그램의 Entry Point

어떤 코드를 실행시키기 위해서는 main 함수 안에 넣어줘야한다.

void main() {
	//코드
}

예를 들어 Hello World 라는 문구를 터미널에 출력하려면 다음과 같이 한다.

(명령 뒤에 세미콜론 잊지 말기)

void main() {
	Print("hello world");
}

Variables (변수)

1. The Var Keyword

Dart에서 변수를 선언하는 방법은 두가지가 있다.

1. Var

void main() {
	var name = "Lukas";
	name = "James"; //가능
	name = 15; //Error
}

var 뒤에 데이터명을 입력하여 선언해준다.

var로 선언했다는 것은 나중에 해당 데이터를 변경할 수 있다는 뜻이지만
항상 같은 데이터타입으로만 바꿔줄 수 있다.

위의 경우에는 name이라는 데이터를 다른 String으로 바꿔줄 수 있지만,
Boolean이나 숫자값으로 바꿔줄 순 없다.

관습적으로 함수나 메소드 내부에 지역변수를 선언할 때 var를 사용한다.

2. 변수 타입 지정

var를 이용한 방법은 데이터 타입을 명시적으로 적어주지 않았지만
명시적으로 변수의 타입을 지정하여 데이터를 선언하는 방법도 있다.

void main() {
	String name = "Lukas";
	name = "James"; //가능
	name = false; //Error
}

이 경우에도 나중에 데이터를 변경할 수 있다.
물론 데이터 타입은 똑같이 지켜주어야 한다.

class에서 변수나 property를 선언할 때에는 이런식으로 타입을 지정해서 선언한다.

2. Dynamic Type

dynamic은 여러가지 타입을 가질 수 있는 변수에 쓰는 키워드이다.

아래와 같이 데이터가 명시되지 않은 채로 선언하면 dynamic 타입으로 지정된다.

void main() {
	var name;
	name = 'Jane';
	name = 20;
	name = true;
	// dynamic 타입이므로 모두 가능하다.
}

또는 dynamic 이라는 데이터를 명시하여 선언할 수도 있다.

void main() {
	dynamic name;
	name = 'Jane';
	name = 20;
	name = true;
}

조건문으로 dynamic 데이터를 String처럼 사용할 수 있다.

void main() {
	dynamic name;
	if (name is String) {
		// 이 안에서는 name을 String으로 인식
	}
	if (name is Int) {
		// 이 안에서는 name을 Int로 인식
	}
}

단, dynamic은 Dart에서 권장되지 않는 데이터 타입이다.
반드시 필요할 때만 사용하도록 한다.

3. Nullable Variables

null safety?

null safety란 개발자가 null 값을 참조하지 못하게 함으로써 런타임 에러를 방지하는 것이다.

예를 들어, null safety가 없는 상태에서는
String의 길이를 구하는 함수에 null 값을 넣게되면 런타임 에러가 나게 된다.

Dart에서는 null safety 기능을 통해 이러한 에러를 방지한다.

void main() {
	String name = 'Patrick';
	name = null; //Error
}

위처럼 String으로 명시된 데이터를 null 값으로 변경하면 빨간줄이 뜨면서 에러가 난다.

nullable(null이 될 수 있는 데이터)

그치만 데이터에 null 값을 허용해야 하는 경우가 있는데 이때는 데이터 타입 뒤에 물음표(?)만 붙여주면 된다.

void main() {
	String? name = 'Patrick';
	name = null;
}

이제 name은 String이 될 수도 있고 null 값이 될 수도 있다.

만약 여기서 name의 length를 구하려고 하면 에러가 뜰 것이다.
name은 null 값일 수도 있기 때문이다.

이때는 조건문을 사용해서 함수를 실행해주어야 한다.

void main() {
	String? name = 'Patrick';
	name = null;
	if (name != null) {
		name.length;
	}
}

하지만 이처럼 조건문을 사용하려면 코드도 길어지고 시간도 더 걸리므로 다른 방법이 또 있다.

데이터명 뒤에 물음표(?)를 붙여서 함수를 실행하는 방법이다.

void main() {
	String? name = 'Patrick';
	name = null;
	name?.length;
}

이렇게 하면 name이 null이 아닐 때만 length를 구해줄 것이다.

4. Final Variables

한번 정의된 변수를 바꿀 수 없게 만드려면 final을 이용해 변수를 선언해주면 된다.

void main() {
	final name = 'Patrick';
	// 이후로는 변수 변경 불가
}

필수는 아니지만 final 뒤에 데이터타입을 지정하는 것도 가능하다.

void main() {
	final String name = 'Patrick';
	// 이후로는 변수 변경 불가
}

5. Late Variables

late는 초기 데이터 없이 변수를 선언할 수 있게 해준다.

예를 들어, 추후에 API를 통해 정보를 가져와 데이터에 입력할 때 사용할 수 있다.

late로 선언된 변수의 경우에는, 변수에 데이터가 설정되기 전까지는 해당 변수를 참조할 수 없다.

void main() {
	late final String name;
	// print(name); <-- Error
	name = 'Sarah';
	print(name);
}

6. Constant Variables

javascript 에는 const 라는 것이 있다.
dart에도 const가 존재하지만 javascriptconst와는 다르다.
javascriptconstdartfinal과 비슷하다.
dart의 constcompile-tile constant 를 만들어준다.

void main() {
	const price = 120;
}

finalconst는 둘 다 나중에 변경될 수 없는 상수를 선언한다는 점에서는 같다.
그러나 const의 경우에는 컴파일 될 때 이미 값을 알고 있어야 한다.
즉, api를 통해 값을 가져오거나 사용자가 직접 값을 입력해야하는 상황에서는 const는 어울리지 않는다.
그럴때는 final이나 var를 사용하는 것이 더 적절하다.

<참조>

[노마드코더] Dart 강좌

0개의 댓글