var은 최초 선언된 타입으로 고정, 타입 변경 불가능
dynamic은 타입 변경 가능
var name = 'jmok';
dynamic name2 = 'mmm';
name2 = 20;
name을 String으로 최초 선언했기 때문에 Integer로 변경 불가능
만약, name = 10으로 바꾸면 error발생
한 번 값을 입력하면 변경할 수 없음
final: 런 타임에서 상수를 정의
const: 컴파일 타임에서 상수를 정의
final 은 소스 실행 중 한번 설정 이후로 값이 변하지 않는 것이고, const 는 컴파일 결정이 되기 때문에 소스 실행 중에는 재정의가 될 수 없음을 의미한다.
결론은 최적화 때문이다.
const의 경우, 컴파일 타임에 결정되기 때문에 앱을 생성할때 한 번 만 생성을 하게 된다. 따라서 특정 화면이 리렌더링이 된다고 하였을 경우, 항상 같은 내용을 표시해주는 경우에는const로 정의가 되어 있으면 재생성 하는 것이 아니라 내부 리소스 낭비를 막아줄 수 있다.
Flutter Widget을 예로들면, Stateless같은 경우는 한번 선언되면 바뀔 일이 없기 때문에 const로 한번만 선언하면 되지만 Stateful같은 경우는 부모위젯에서 인자를 받아와 생성되므로 final로 선언해야한다.
Dart 언어에서 ENUM은 "enumeration"의 약자로, 서로 연관된 상수 값을 나타내는 데 사용되는 특별한 유형이다. ENUM은 정수, 문자열 또는 사용자 정의 값 중 하나를 가질 수 있는 고유한 값을 가지는 상수의 집합을 나타낸다.
ENUM을 사용하면 일련의 연관된 값들을 정의하고 사용할 수 있다. 이를 통해 코드의 가독성을 향상시키고, 잠재적인 오류를 줄이고, 코드 작성을 단순화할 수 있다. ENUM은 다양한 상황에서 사용될 수 있으며, 예를 들어 월(Month)의 열거형을 정의하거나, 요일(Day of the Week) 또는 컬러(Color)와 같은 값들을 나타낼 수 있다.
enum Status {
approved, //승인
pending, // 대기
rejected, //거절
}
void main() {
Status status = Status.approved;
if (status == Status.approved) {
print('승인입니다.')'
}
else if (status == Status.pending) {
print('대기입니다.');
}
else {
print('거절입니다.');
}
}
승인입니다.