-
#5. Flutter 의 근간인 Dart - 변수기술/Flutter 2021. 1. 27. 01:03
들어가기 전
위 문서를 번역하며 공부한 내용입니다.
해당 투어는 다른 언어로 프로그래밍하는 방법을 이미 알고 있다는 가정하에 문서를 진행합니다.
변수
다음은 변수를 만들고 초기화하는 예입니다.
var name = 'Bob';
변수는 참조를 저장합니다. name 변수는 String 객체인 'Bob' 의 참조를 가지고 있습니다.
객체가 단일 타입으로 제한되지 않는 경우 디자인 지침에 따라 Object 또는 dynamic 타입으로 지정합니다.
dynamic name = 'Bob';
다른 옵션은 타입을 명시적으로 지정하는 것 입니다.
String name = 'Bob';
기본 값
초기화되지 않은 변수의 초기 값은 null입니다.
Dart의 다른 모든 것과 마찬가지로 숫자도 객체이기 때문에 숫자 타입도 초기 값은 null입니다.
int lineCount; assert(lineCount == null);
final, const
변수를 절대 변경하지 않으려면 var 대신 final이나 const를 사용합니다.
final 은 한 번만 설정할 수 있습니다. const는 컴파일 타임 상수입니다. ( const변수는 암시적으로 final변수입니다. )
최상위 수준 final과 클래스 변수는 처음 사용될 때 초기화됩니다.
인스턴스 변수는 final 이 될 수 있지만 const는 되지 않습니다. final 타입의 인스턴스 변수는 생성자가 시작되기 전 변수 선언이나 생성자 파라미터, 생성자 초기화 목록에서 반드시 초기화되어야 합니다.
다음은 final 변수를 만들고 설정하는 예입니다.
final name = 'Bob'; // 타입 없이 선언했습니다. final String nickname = 'Bobby';
final 값은 변경할 수 없습니다.
// 분석기에서 에러가 납니다. name = 'Alice'; // final 변수는 한번만 설정될 수 있습니다.
컴파일 타임 상수가 될 변수에 대해 const를 사용합니다. const 를 클래스에서 사용할 경우 static const 를 붙입니다.
변수를 선언하는 경우 값을 숫자 또는 문자열 리터럴, 상수 변수 또는 상수가 나오는 연산의 결과와 같은 컴파일 타임 상수로 설정합니다.
const bar = 100000; // 압력 단위 (dynes/cm2) const double atm = 1.01325 * bar; // 표준 대기
const 키워드는 단순히 상수 변수를 선언하는 것만이 아닙니다. 이를 이용하여 상수 값을 생성하고 상수 값을 생성하는 생성자를 선언할 수 있습니다. 모든 변수는 상수 값을 가질 수 있습니다.
var foo = const []; final bar = const []; const baz = []; // const [] 로 표시한 것과 동일합니다.
baz 변수 선언에서 본 것처럼 const 선언의 초기화 표현식에서 const를 생략할 수 있습니다.
자세한 내용은 DON'T use const redundantly를 참고하세요.
final, const로 설정된 변수가 아닌 값들은 변경 가능합니다.
foo = [1, 2, 3]; // 이전에 변수 foo의 값은 const [] 였습니다.
const 변수의 값은 변경할 수 없습니다.
// 분석기에서 에러가 납니다. baz = [42]; // Error: Constant variables can't be assigned a value.
type check, type case, collection if, spread operator를 사용하는 상수를 정의할 수 있습니다.
const Object i = 3; // i 는 int 값을 가지는 const 객체입니다. const list = [i as int]; // typecast 를 사용했습니다. const map = {if (i is int) i : "int"}; // is 와 collection if 를 사용했습니다. const set = {if (list is List<int>) ...list}; // spread operator 를 사용했습니다.
final 객체를 수정할 수 없지만 필드를 변경할 수 있습니다. 대조적으로 const 객체는 불변하므로 필드를 변경할 수 없습니다.
더 많은 const를 사용하여 값을 만드는 것은 Lists, Map, Classes를 참고해주세요.
final과 const에 대해 조금 더 정리하자면
- 공통
1. 설정된 이후 수정할 수 없습니다.
- Const
1. 코드 실행 전 컴파일 타임에 반드시 알아야 하고 코드 실행 중에 결정될 수 없음을 뜻합니다.
2. 클래스 레벨에서 상수를 지정해야 하는 경우 static const로 두 키워드를 지정해야 합니다.
3. const 컬렉션은 그 안에 있는 것들이 재귀적으로 const 여야 합니다.
- Final
1. 런타임에서 설정되는 값입니다. 런타임에서 값이 설정될 때 반드시 값이 초기화되어야 합니다.
2. const 와는 다르게 재귀적으로 final 일 필요가 없습니다. 그 말은 즉, 컬렉션 그 안에 있는 것들은 수정이 가능합니다.
'기술 > Flutter' 카테고리의 다른 글
#6. Flutter 의 근간인 Dart - 내장 유형 (0) 2021.01.27 #4. Flutter 의 근간인 Dart - 키워드 (0) 2021.01.27 #3. Flutter 의 근간인 Dart - Dart 의 컨셉 (0) 2021.01.27 #2. Flutter CLI (0) 2021.01.23 #1. Flutter Roadmap - Github 자료 (0) 2021.01.23