Dart의 final vs const
final과 const 키워드는 많은 프로그래밍 언어에서 사용된다.
Dart에서는 두 키워드 모두 사용되는데, 각각의 사용처가 조금 다르다.
final
final로 선언된 변수는 딱 한번 initialize 된 후 그 값이 변하지 않는다.
즉, run time constant라고 볼 수 있다.
코드의 첫 실행 혹은 객체의 첫 생성시에 값이 결정되고, 만약 새로 객체가 생성된다면 그 때에는 다른 값이 들어올 수 있다.
그렇다면 언제 사용 될 수 있는가?
주된 사용처는 constructor로 주입받는 class의 변수를 생각해 볼 수 있다.
class Person {
final String name;
Prerson(this.name);
}
위 클래스처럼 변하지 않는 값을 받을 때 사용할 수 있다.
const
const로 선언된 상수는 compile time에 값이 정해지고 절대 변하지 않는다.
말 그대로 constant(상수)이다.
compile time에 값이 정해지므로 위의 예제처럼 실행될 때 값을 알 수 있는 곳에서는 사용하지 못한다.
그렇다면 언제 사용 될 수 있는가?
상수 값을 하드 코딩으로 박아놓을 때 사용 할 수 있다.
class Person {
void walk() {
const speed = 3;
}
}
하지만 class에서 instace field에 const 키워드를 사용하려 하면 static field에만 사용 할 수 있다는 메시지가 뜬다.
class 내부에 static이 아닌 불변하는 변수를 두려면 단순한 값은 final로, List 같은 값은 final과 const의 조합으로 가능하다.
class Person {
// const kind = 'animal'; Error
final kind = 'animal';
final availableAction = const ['walk', 'talk', 'eat'];
}
마치며
최대한 immutable하게 만드는게 아무래도 버그 가능성을 줄여주겠지?
열심히 사용하자..
Author And Source
이 문제에 관하여(Dart의 final vs const), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ghrud92/Dart의-final-vs-const저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)