[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