나만의 개발노트

[Dart] Variables(변수) 본문

[Flutter]/[Dart]

[Dart] Variables(변수)

노트포미 2024. 7. 12. 16:38

1. 변수 선언

void main(){
	var str1 = 'abc'; //방법1
    String str2 = '가나다'; //방법2
    str1 = 'def';
}

[방법1]

: var 키워드를 사용해서 선언

  • 변수는 업데이트 될 수 있고, 초기 선언한 타입과 일치해야 함 (여기서는 String)
  • 함수나 메소드 내부에 지역변수를 선언할 때 사용

[방법2]

: 변수의 타입을 명시적으로 선언

  • 변수는 업데이트 될 수 있음
  • 클래스에서 변수나 속성을 선언할 때에 사용

2. Dynamic 타입

void main(){
	dynamic variable1;
    var variable2;
}

: 여러가지 타입을 가질 수 있는 변수

  • 변수의 타입을 알 수 없을 때 주로 사용
  • 변수를 선언할 때 dynamic 키워드를 사용하거나, 값을 지정하지 않으면 dynamic 타입이 됨.
  • 최대한 사용 지양(위험 방지)

3. Null Safety

: 개발자가 null값을 참조할 수 없게 하는 것

 

=>? 키워드 사용

 

[ ?를 선언 시 사용]: null이 될 수 있음을 표시

void main(){
	//case1 : 정상
    String str1 = 'abc'; //String만 가능
    
    //case2 : 컴파일 오류
    String str2 = 'bcd';
    str2 = null; //컴파일 오류
    
    //case3 : 정상
    String? str3 = 'cde'; //'?'키워드 -> String과 null이 가능
    str3 = null; //정상
  • dart언어에서 기본적으로 변수는 모두 nullable하지 않음 => null값을 가능하게 하려면 '?' 키워드 사용 필요

[?를 조건문으로 사용]

: null이 아니라면, 이라는 조건문

void main(){
	String? str = 'abc';
	...
    //방법1 : if문 사용
    if(str != null) str.isEmpty;
    
    //방법2 : ? 키워드 사용
    str?.isEmpty; //str이 null이 아닐 때 라는 뜻

*참고 : isEmpty속성은 String 타입만 사용 가능(null에서는 컴파일 에러)


4. Final 변수

: 수정할 수 없는 변수를 만들 때, 'final'키워드 사용

void main(){
	//수정 가능
	var variable1 = 'abc';
    variable1 = 'bcd';
    
    //수정 불가
    final variable2 = 'abc';
    variable2 = 'bcd'; //컴파일 에러
}
  • var -> final 키워드로 변경하면 됨
  • 타입을 명시적으로 표시해도 됨 (보통 안하는게 가독성 좋음) //final String variable2 = 'abc';

5. Late 변수

: 선언과 초기화를 분리시키는 수식어

void main(){
	late final str;
    ...
    //지정할 코드를 받은 후
    str = 'abc';
}
  • 할당 값을 나중에 지정해야할 때, var이나 final 앞에 작성 ex) 정보를 API에서 받아와야 할 때
  • 값을 넣기 전까지 해당 데이터의 접근을 막아 null safety 해준다
ex)
void main(){
	late final str;
    print(str); //컴파일 에러
}

6. constant 변수

: compile-time에 초기화 되는 변수

void main(){
	const str1 = 'abc'; //컴파일 시점에 정해지는 값
	final str2 = fetchAPI(); //컴파일 할 때, 정해지지 않은 값 = 실행 시 결정되는 값
}
  • final 과 동일하게 한번 설정 후, 수정 불가
  • API, 사용자 입력값 등 컴파일 시점에 정해지지 않는 값을 선언할 때 사용
  • 자바스크립트의 const와는 다름 //자바스크립트의 const = Dart의 final