[Dart] 변수의 선언과 할당

slight-snow·2023년 9월 14일
0

Dart

목록 보기
2/3
post-thumbnail

1. Hello World!

Dart에서는 JavaScript와 다른 점들이 제법 존재하는데,
void main()을 작성해줘야 코드가 실행될 수 있다는 점, print를 사용하여
기존의 JavaScript에서의 console과 유사하게 콘솔 출력을 할 수 있다는 것이다.
그리고 코드가 끝날 때마다 반드시 ;(세미콜론)이 찍혀야 에러가 나지 않는다.

void main() {
	print('Hello World!');
}

여전히 주니어 개발자지만 이게 얼마만의 Hello World란 말인가, 후후...
괜히 학생때로 돌아간 것 같아 기분이 굉장히 묘하다.


2. 변수 만들기

일반적인 변수 선언 방법에는 크게 var, type, dynamic, final 이렇게 4가지가 있다.

1) var

  • 관습적으로 함수나 매서드 내부에 지역 변수를 선언할 때 사용된다.
  • 선언과 할당이 동시에 이뤄진 경우,
    할당에 사용된 type과 동일한 type에 한하여 재할당이 가능하다.
  • 예를 들어, '한글'(String)을 할당하고 123(int)를 할당하는 것은 불가능하다.
void main() {
	var name = '소설';
    name = 'snow';
}

2) type

  • class에서 변수나 property를 선언할 때 사용된다.
  • type이 지정되어 있으므로 다른 type의 재할당은 불가능하다.
void main() {
	String name = '소설';
    name = 'snow';
}

3) dynamic

  • 여러가지 타입을 가질 수 있는 변수에 쓰는 키워드다.
  • 선언과 할당을 따로하는 var 선언을 통해서도 가능하다.
// dynamic
void main() {
	dynamic name = '소설';
    name = 123;
}

// var
void main() {
	var name;
    name = '소설';
    name = 123;
}

4) final

  • JavaScriptconst 선언과 동일하다.
    재선언, 재할당이 불가한 선언이다.
  • type과 함께 선언할 수 있으나, 할당된 값으로 type을 알아서 유추해주기 때문에
    굳이 type을 선언해주지 않아도 된다.
void main() {
	final kor = '소설';
    final String eng = 'snow';
}

3. 추가 선언문

1) late

  • late 선언은 var이나 final앞에 선행하여 작성할 수 있는 선언문으로,
    초기 값 없이 변수를 선언할 수 있도록 해주며 이후에 원하는 시점에 할당할 수 있게 한다.
  • 할당이 이뤄지지 않는 초기의 선언만으로는 print로 접근할 수 없다.
void main() {
	late final name;
    print(name); //ERROR, 불가능
    
    late final name;
    name = '소설';
    print(name); //가능
}

2) const

  • Compitle-Time Constant를 만들어주는 선언문이다.
    컴파일할 때 알고 있는 값에 사용하는 선언,
    즉 앱스토어에 앱 코드를 넘기기 전에 개발자가 아는 값에 한하여 사용하는 선언이다.
  • final과 마찬가지로 재할당, 재선언이 불가능하다.
  • API로부터 받아온다거나 사용자가 입력해야하는 예측 불가능한 값에 대해서는
    final이나 var를 사용하는 것이 적절하다.
void main() {
	const name = '소설'; //OK
    name = 'snow'; //ERROR, 불가능
    
    const name = fetchData(); //ERROR, 불가능
    
    //예를 들어, 아래와 같이 활용이 가능할 것이다.
    const max_user_coin = 10000;
}

4. Null Safety

Null Safety란, 데이터가 null이 될 수 있음을 명시하여
null이 무차별적으로 원치 않는 곳에서 참조되지 않도록 방지해주는 것을 의미한다.

기존의 선언과 동일하지만, type뒤에 ?를 붙여서 null값을 가질 수 있다는 것을 명시할 수 있다.

void main() {
	String name = '소설';
    name = null; //ERROR, 불가능
    
    String? name = '소설';
    name = null; //가능
}

단, 이렇게 null값을 가질 수 있다고 명시한 경우
null이 아닌 값을 가졌을 때에 한하여 코드가 돌아가도록 하는 것이 바람직하다.

void main() {

	String? name = '소설';
    
    if ( name != null ) {
    	name.isEmpty;
    }
    
    // 이 주석을 기준으로 위와 아래의 코드는 동일하게 작동한다.
    
    name?.isEmpty;
    
}
profile
주니어 개발자의 기억을 위한 기록 :)

0개의 댓글