앱/Dart

Dart - Variable 종류 int, var, dynamic, final, late, const

공대생철이 2023. 1. 2. 22:07
728x90

플러터를 배우기 위해 새롭게 배우기 시작한 Dart

 

플러터는 Dart를 활용한 프레임워크이기에 기본적으로 Dart라는 언어에 대한 지식은 있어야 한다.

 

JS를 계속 썼던 사람은 (ex 나) 아마 Dart라는 언어에 대해서 되게 빡빡하다고 느낄 수 있을 것 같다.

그럼에도 TS랑 비슷한 결이 있다고 하니 배워보면 좋은 언어인 듯.

 

Dart의 타입을 살펴보기 전에 가장 기본적으로 Dart는 main이라는 함수에 넣어주어야 실행된다.

 

이제 Dart의 다양한 변수들을 보자.

 

1. int, String

 

익숙하다. 우리가 아는 int, String

맞다.

이런 식으로 정수형과 문자열의 변수를 선언해줄때 사용한다.

 

2. var

 

JS를 했던 사람이라면 var에 대해서 모를 수가 없다.

그런데 그 결이 조금 다르다.

 

var로 변수를 선언하면 그냥 아무거나 넣고 막 변경이 됐는데 Dart는 다르다.

이런 식으로 하게 되면 에러가 뜬다.

 

Dart에서 var는 처음 변수를 선언할 때 아무거나 다 괜찮지만 선언된 후에는 variable이 고정된다.

 

위의 코드에서 name을 처음에 String으로 해주었기 때문에 name 변수에는 String만 들어가야된다.

그래서 12 라는 int 를 넣어주면 에러가 뜬다. String으로 넣으라고 친절하게 안내해준다.

 

3. dynamic

JS에서 var는 Dart의 dynamic과 유사하다고 보면 된다.

위에서 var로 선언하면 에러가 등장하는 것과 다르게 dynamic을 넣으면 variable 타입이 바뀌어도 상관없다.

그래서 여기서는 에러가 안 뜬다.

 

하지만 Dart라는 언어의 지향점이 Type의 일관성을 통해서 에러를 방지하고 생산성을 늘려준다는 것이니 dynamic 사용을 되도록 지양하자.

 

에러를 불러일으킬 확률이 매우 높다.

 

4. final

final은 JS에서 const의 역할과 비슷하다. 

변하지 않는 값을 할당해줄 때 사용한다.

 

위에서 썼던 int나 String을 활용해서 변수 선언도 가능하다. 

만약 final 변수에 이렇게 내용을 수정하려고 한다?

바로 에러다.

JS에서 const 문자열 수정하려고 하면 에러 뜨는 거랑 똑같은 원리다.

변하지 않는 constant variable을 선언할 때 final을 사용한다.

 

 

5. late

late는 Dart에서 처음 보는 유형의 변수이다.

 

말 그대로 늦게 할당해준다고 생각해도 된다. 

위의 경우 fetchedData라는 변수명만 선언해놓고

api에서 data를 불러올 때까지 기다린 후

그 data를 할당해주는 방식으로 활용이 가능하다.

 

실제 api 호출한 후 그 data를 할당해줄 때 많이 쓴다고 한다.

 

할당을 늦게 해주는 변수 타입이다.

 

6. const

 

나 포함 많은 사람들이 헷갈릴 만한 개념이다.

일단 const도 변하지 않는 값을 저장해주는 변수는 맞다.

 

그럼 final이랑 뭐가 다른데??

 

final은 위에서 눈치챘을 수도 있지만 변수명만 선언하고 할당은 나중에 할 수 있다.

하지만 const는 아니다.

 

선언과 동시에 무조건 할당해줘야한다. 변수명만 선언하면 에러 뜬다.

 

이 차이가 발생하는 이유는 const는 앱이 컴파일 될 때 이미 알고 있어야하는 값이기 때문이다.

앱이 컴파일 된 후 새로운 변수를 불러주는 게 아니라 앱이 시작될 때 컴파일과 읽기가 동시에 이루어진다.

 

final은 반대로 컴파일 된 후 새로운 변수명을 하나 선언해주는 것이기 때문에 전혀 상관없다.

 

const의 활용 방법에는 컴파일과 동시에 데이터를 불러와야할 때 필요한 api_key 같은 것들을 불러올 때 활용한다고 한다.

 

이 부분에 대해서는 예시를 좀 더 많이 다뤄보면서 익혀야될 것 같다.

728x90