Dart의 var, final, const

2023. 7. 27. 21:00IT/Concept

반응형

 

Flutter는 놀라운 프레임워크다. Flutter를 이용하면 웹, 모바일 앱, 데스크탑 앱 등 온갖 서비스를 구현할 수 있다. 그리고 Dart는 바로 이러한 Flutter의 언어다. Java를 비롯한 다른 언어들과 마찬가지로, Dart에는 변수명 앞에 붙이는 키워드가 여러 개 있다. 이번 포스팅을 통해 Dart에서 사용되는 var, final, const 키워드의 용도와 특징을 살펴보자.


1. var

Dart에서는 변수를 선언할 때 직접 타입을 명시할 수도 있고, var키워드를 사용해 타입을 생략할 수도 있다.

// case 1
String name = 'Mesotes';
// case 2
var blogName = 'Share2Learn';

둘의 쓰임새는 똑같다. 위 예시의 경우, 명시적으로 타입을 선언한 case 1이나 var를 사용한 case 2나 마찬가지로 해당 변수에는 String밖에 할당되지 못한다. 또한 둘 다 mutable한 변수를 선언할 경우 사용된다. 즉, 추후 런타임 상에서 타입이 기존과 동일한 새로운 값이 할당될 수 있다.

 

관습적으로 var는 보통 함수나 메소드 내부에 local variable을 선언할 때 사용한다.

반면, class에서 property나 변수를 선언할 때는 명시적으로 타입을 나타낸다.

 

2. final과 const

final과 const 모두 immutable한 값을 선언할 때 사용된다. 둘의 차이점은, final 변수에는 런타임 시 값이 할당되는 반면, const 변수에는 컴파일 시 값이 할당된다는 점이다. 하나씩 살펴보자.

 

final은 var와 거의 동일하나 차이점은 mutable이 아닌 immutable한 변수를 담기 때문에 한 번 값이 할당되면 추후 값을 변경할 수 없다. Immutable이라고 해서 그 값이 항상 상수인 것은 아니다. 만약 final 변수가 List와 같은 Collections일 경우, 리스트 내부의 값들은 변경 가능하다. 즉, final 변수 안에 모든 것은 final이 아니다.

final numbers = [1, 2, 3];
numbers[0] = 0;
numbers.add(4);
// numbers = [0, 2, 3, 4]

final의 경우 컴파일 시 아직 값을 모르지만 런타임 시 immutable하도록 변수를 정의할 때 사용할 수 있다. 예를 들어 HTTP response를 받거나 database나 local file을 읽어들일 경우 변수를 final로 선언할 수 있다.

 

const 변수는 컴파일 시 immutable한 값을 할당한다. const 활용 시 하나의 인스턴스를 여러 곳에서 재사용 가능하기 때문에 메모리 효율적이다. 이러한 특성들로 인해 가능한 한 final 대신 const를 사용함으로써 flutter에서 widget build cost를 낮추고 효율적인 서비스를 설계 가능하다. final 변수와 달리 const 변수의 경우, 변수 안에 모든 것은 const다. 예를 들어 다음의 경우 에러가 난다.

const numbers = [1, 2, 3];
numbers[0] = 3;
print(numbers); // Exception: Cannot modify an unmodifiable list

final numberOne = 1; // Not constant
const numbers = [numberOne, 2, 3]; // Error: Not a constant expression.

 

Python, Java 등과 달리 Dart에서는 const 변수의 naming convention이 다른 일반 변수의 naming convention과 다르지 않다. Dart에서는 관습적으로 classes, enums, typedefs, extensions 이름은 PascalCase로, libraries, packages, directories, source files 이름은 snake_case, variables, constants, parameters 이름은 camelCase로 표기한다.

 

3. 마무리

정리하자면, 일단 변수 선언 시 const로 선언하자. 만약 런타임 시 정해지는 값이라면 final로 바꾸자. 프로그램을 작성하면서 만약 해당 변수가 mutable하게 된다면 그때서야 var, 혹은 명시적 타입 선언으로 바꿔주자.


더 자세히 알아보기

관련서적: Dart documentation

 

 

 

 

-학습을 진행하며 남기는 지식 포스팅-

 

-부족한 설명이 있다면 부디 조언 부탁드립니다-

 

 

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로,

이에 따른 일정액의 수수료를 제공받습니다

반응형

'IT > Concept' 카테고리의 다른 글

Flutter의 아키텍처와 BuildContext  (73) 2023.08.17
Dart의 Compile Platform  (46) 2023.08.03
Golang으로 Python의 collections.Counter 구현하기  (77) 2023.02.13
자주 쓰는 Git Command를 정리해보자  (0) 2022.08.25
Javascript의 클로저란?  (0) 2022.08.11