코딩/Dart

dart - 변수 선언 정리

김기지 2024. 8. 19. 23:07

1. var

var 키워드로 변수명을 선언한 후 값을 할당

값을 업데이트할 때는 변수의 본래 타입과 일치해야한다.

var name = 'kiji';

name = 'jiwon';
name = 12; ❌

 

 

2. 명시적 타입 지정

명시적으로 변수의 타입을 지정

String name = 'kiji';

 

 

📍 var와 명시적 타입 지정은 언제 사용하는지?

더보기
  • var → 관습적으로 함수나 메소드 내부에 지역변수를 선언할 때
  • 명시적 타입 지정 → class에서 변수나 property를 선언할 때

함수 안에서 지역변수를 선언하거나 메소드 안에서 지역변수를 선언하는 상황에서는 var를 사용하는 것을 권장한다!

 

 

3. dynamic(사용 추천은 )

여러가지 타입을 가질 수 있는 변수에 사용하는 키워드

변수의 타입을 알기 어려운 경우 dynamic을 사용해 돌아가는 것이 유용할 수 있다.

변수를 선언할 때 값을 지정하지 않거나 타입을 지정하지 않으면 자동으로 dynamic 타입을 가진다.

 

⭐️dynamic은 자동으로 nullable이 된다⭐️

dynamic name;
name = 'kiji';
name = 12;
name = true;
name = null;

 

 

if문으로 변수의 타입을 체크할 수 있다.

if(name is String){
	print(name.length);
}

 

 

4. Null Safety

개발자가 null값을 참조할 수 없도록 하는 것

변수에 null이 들어와 발생할 수 있는 런타임 에러를 방지할 수 있다.

Null safety를 사용하면 변수의 타입에 명시적으로 nullable 여부를 지정할 수 있다.

String? name; // -> name은 null 또는 String
name = 'kiji';
name = null;

 

단, 특정 타입의 속성을 사용하고자 할 때는 if문으로 타입을 좁히거나 변수 뒤에 ?를 붙여준다.

if(name != null){
	print(name.length);
}

print(name?.length);

 

⇒ Null Safety는 Dart에서 안정성을 높이기 위한 강력한 기능으로 변수가 null일 수 있는지 여부를 명시적으로 나타내어 안전한 코드 작성을 지원한다.

 

 

5. final

수정할 수 없는 변수를 만드는 키워드

값은 단 한 번만 넣을 수 있다.

자바스크립트의 const와 비슷함!

  • final → 런타임에 값이 정해짐
  • const → 컴파일 타임에 값이 정해짐

⇒ 런타임에 값을 고정하고 싶은 경우에는 const를 사용한다.

변수를 선언할 때 추가로 타입을 선언할 수 있다.(필수는 아님)

final String name = 'kiji';

 

 

6. late

final이나 var 앞에 붙여줄 수 있는 수식어

초기 데이터 없이 먼저 변수를 생성하고 추후에 데이터를 넣을 때 주로 사용한다.

flutter로 data fetching을 할 때 유용하다.

void main(){
	late final String name;
	// api 요청
}

 

 

7. const

dart에서는 compile-time constant를 만들어준다.

(( 자바스크립트의 const는 dart의 final과 유사함 ))

 

const는 컴파일 할 때 알고 있는 값에 사용한다.

만약, 어떤 값인지 모르고 그 값이 API로부터 오거나 사용자가 화면에서 입력해야 하는 값이라면 const가 아닌 final 또는 var를 사용해야 한다.

 

⇒ const는 앱스토어에 올리기 전 이미 알고 있는 값을 다룰 때 사용한다.

void main(){
	const name = 'kiji'; // 컴파일 시점에 바뀌지 않는 값
	final userName = fetchAPI(); // 컴파일 시점에 바뀌는 값
}

 

 


💜 변수 선언 정리 💜

  1. var 변수명 = 변수값
  2. 처음 할당한 변수값과 같은 타입으로만 업데이트 가능
  3. String 변수명 = 변수값
  4. 명시적으로 설정한 타입으로만 업데이트 가능
  5. String? 변수명 = 변수값
  6. 명시적으로 설정한 타입 외에 null 타입으로도 업데이트 가능
  7. dynamic 변수명 = 변수값
  8. 처음 할당한 변수값과 다른 타입으로 업데이트 가능
  9. final 변수명 = 변수값
  10. 한 번 할당한 변수값을 바꿀 수 없음
  11. late final String 변수명❌ 한 번 할당한 변수값을 바꿀 수 없음 ❌
  12. 처음 변수명을 선언할 때 변수값을 할당하지 않고 나중에 명시적으로 설정한 타입으로 변수값을 설정할 수 있음
  13. const 변수명 = 변수값❌ 한 번 할당한 변수값은 바꿀 수 없음 ❌
  14. 컴파일하기 전에 미리 변수값을 정해줘야 함
728x90