[Dart] Variables (변수)
공식문서를 통해 Dart에서 사용되는 변수 (final, const, late) 그리고 Null Safety에 대해 알아보자.
Apr 03, 2024
목차
Null Safety
Null Safety는 기본적으로 변수에 의도치 않는 Null 값이 들어가면서 생기는 에러를 사전에 방지하기 위함이다.
즉, 타입이 제대로 정의 되지 않은 변수는 허용치 않을 것이며, 컴파일 타임에 감지함하여 사전에 미리 에러를 던져, 개발자가 의도하지 않은 Null 값이 들어 갈 수 있는 상황을 방지 하는것이다.
이 사전에 던지는 에러를 Dart에서는
null dereference error
(한국말로는 널 역참조 에러… 한국말이 더 어려운것 같다)로 정의 한다고 한다.Null Safety의 도입으로 3가지 중요한 변화가 있다.
- null 값을 허용할 것인지 아닌지를 선언 단계에서 설정할 수 있다.
String? name // Nullable type. Can be `null` or string. String name // Non-nullable type. Cannot be `null` but can be string.
- 변수는 사용하기 전에 선언해야한다. Null 값을 허용하는 변수는 Null 값이 기본 값이므로, 다른 값을 선언하지 않으면 null 값으로 초기화된다. 따라서 Dart는 null 값을 허용하지 않는 변수에 대해 변수 선언시 값을 선언하도록 강제한다.
- Null 값이 허용되는 변수는 다른 프로퍼티나 메서드에 접근할 수 없다.
Late Variables
…
Final and Const
변수의 값이 변하지 않을 것을 알고 있다면 final과 const로 값을 정의하는 것이 좋다.
그렇지 않다해도 프로그램의 안정성을 위해 의도치 않은 값의 변경을 방지 하기 위해서라도 보통 final과 const를 사용하여 변수를 선언하는 것이 일반적이다.
Although a
final
object cannot be modified, its fields can be changed. In comparison, a const
object and its fields cannot be changed: they're immutable.Final
final로 선언된 변수는 한번만 선언할 수 있다. 즉, 나중에 임의로 값을 변경할 수 없다.
final name = 'Bob'; // Without a type annotation final String nickname = 'Bobby'; name = 'Alice'; // Error: a final variable can only be set once.
const
const도 한번만 선언할 수 있는데, final과 달리 컴파일타임에 선언되는 변수이다.
컴파일타임에 선언된다는 의미는 런타임에 값이 변경되지 않으며, 프로그램 실행시에(컴파일 타임) 이미 해당 변수를 프로그램이 알고 있는 상태이다. const는 프로그램 실행 후 자동으로 final로 취급된다.
- class안에서 const를 선언하는 경우
static const
로 선언할 수 있다.
const는 변수 선언용 뿐만아니라 상수를 선언하거나 상수를 만드는 constructor를 선언하는데도 사용할 수 있다. (List, Map, Class 등)
var foo = const []; final bar = const []; const baz = []; // Equivalent to `const []`
Share article