-
[Flutter] Dart 변수: final, const 선언 살펴보기App 2024. 6. 20. 15:28
Dart의 final과 const 변수는 일반적으로 한번 정의하고 바뀌지 않는 변수를 선언할때 쓰이지만
각각의 특징이 있다.
미리보기 및 정리
final const 미리 선언, 후 할당 가능 불가능 인스턴스 변수 선언 가능 불가능 일반 클래스 선언 가능 불가능 클래스 선언 후 멤버변수 수정 가능 불가능 (** 이렇게 써놓으니까 어렵고 많은 차이가 있는 것 같다.)
## final
- 할당된 값을 변경하지 않을때 사용
final name = "Thewy"; name = "Chewys"; // 불가능
- 선언하고 후에 값을 할당 가능
final finalLate; finalLate = 42; // 가능
- 인스턴스 변수는 final로 생성 가능
class Class { final x = 15; // 가능 }
- 숫자, 문자열 리터럴, 상수 클래스뿐 아니라 일반 클래스에도 선언 가능
void main(List<String> arguments) { final number = 0; // 가능 final string = "String"; // 가능 final map = {"key": "value"}; // 가능 final constantClass = ConstantClass(); // 가능 final exampleClass = Class(); // 가능 } class Class { var x = 15; final y = 30; // 가능 } class ConstantClass { const ConstantClass(); final name = "constant"; }
- 멤버변수, 객체 내부 값 변경 가능
class Class { var x = 15; } void main(List<String> arguments) { final exampleClass = Class(); // 가능 exampleClass.x = 30; // 가능 final map = {"key": "value"}; // 가능 map["key"] = "value2"; // 가능 }
## const
- 할당된 값을 변경하지 않을때 사용
const name = "Thewys"; name = "Chewy"; // 불가능
- 먼저 선언하고 후에 값을 할당 불가능
const constLate; constLate = 43; //불가능
- 인스턴스 변수는 const로 생성 불가능
class Class { const x = 13; // 불가능 }
- 숫자, 문자열 리터럴, 상수 변수, 상수 클래스에만 선언가능 (일반 클래스에는 선언 불가능)
const number = 0; // 가능 const string = "String"; // 가능 const map = {"key": "value"}; // 가능 const constantClass = ConstantClass(); // 가능 const class = Class(); // 불가능
- 멤버변수, 객체 내부 값 변경 불가능
const map = {"key": "value"}; // 가능 map["key"] = "value2"; //불가능 -- 정확히는 런타임시 에러가 남.
## 추가적인 내용
final에서는 대부분 되고, const에서 안 되는게 많으니 final만 쓰는게 짱짱 아닐까 할 수 있겠지만,
**const는 컴파일 타임 상수로 코드를 컴파일 할 때, 해당 값이 계산된다.
실제 Flutter 개발을 하다보면, 위젯을 const 로 선언하라는 경고 문구를 많이 볼텐데, 동적으로 변화하지 않는 위젯이라면
const 선언을 하여, 컴파일때 빌드하고 런타임 중에는 re-build 하지 않아 퍼포먼스를 향상시킬 수 있다.
'App' 카테고리의 다른 글
[Flutter] 디자인 위젯, 쿠퍼티노(Cupertino)와 머티리얼(Material) (0) 2024.06.16 [Flutter] 맥북에 플러터 설치하기(with Visual Studio Code) (0) 2024.06.14