Dart(플러터)에서 var과 dynamic의 차이를 정리해드리겠습니다.
var vs dynamic 기본 개념| 키워드 | 특징 | 타입 고정 여부 | 타입 체크 |
|---|---|---|---|
var | 타입 추론 | O (초기값 기준으로 고정됨) | 컴파일 시점에 타입 체크 |
dynamic | 동적 타입 | X (값에 따라 타입 변경 가능) | 런타임 시 타입 체크 |
var (타입 추론, 고정됨)var는 초기값을 기준으로 타입이 자동으로 결정됨.void main() {
var name = "Alice"; // String으로 타입 추론됨
name = "Bob"; // ✅ 같은 타입이므로 변경 가능
// name = 10; // ❌ 오류: 초기 타입이 String이므로 int 할당 불가능
var age; // 타입 미지정 시 dynamic으로 처리됨
age = 25;
age = "Twenty Five"; // ✅ dynamic처럼 사용됨
}
📌 정리
var에 초기값이 있으면 그 타입으로 고정됨. dynamic과 유사하게 동작하지만, 자동 타입 체크는 유지됨.dynamic (완전한 동적 타입)dynamic은 어떤 타입이든 저장 가능하며, 타입이 계속 바뀔 수 있음.void main() {
dynamic value = "Hello";
value = 42; // ✅ 가능 (타입 변경 가능)
value = true; // ✅ 가능
print(value.length); // ❌ 오류 발생 (boolean에는 length 속성이 없음)
}
📌 정리
Object와의 차이| 타입 | 타입 변경 가능 여부 | 메서드 호출 가능 여부 |
|---|---|---|
var | ❌ (초기 타입 고정) | O (타입 체크됨) |
dynamic | ✅ (아무 타입이나 가능) | X (타입 체크 없음) |
Object | ✅ (아무 타입이나 가능) | X (Object 메서드만 사용 가능) |
void main() {
Object obj = "Hello";
print(obj.length); // ❌ 오류 (Object에는 length 없음)
dynamic dyn = "Hello";
print(dyn.length); // ✅ 가능 (그러나 런타임에서만 검사됨)
}
📌 Object는 모든 타입을 저장할 수 있지만, 메서드 호출 시 as나 is로 타입 변환이 필요함.
var, dynamic을 써야 할까?✅ var을 사용하는 경우:
String, int, List<String> 등).✅ dynamic을 사용하는 경우:
Map<String, dynamic>).| 키워드 | 언제 사용해야 하나? |
|---|---|
var | 일반적인 경우, 타입을 자동 추론하지만 변경하지 않을 때 |
dynamic | 타입이 유동적으로 변할 필요가 있을 때 (JSON, API 응답 등) |
Object | 모든 타입을 받을 수 있지만, 안전한 타입 체크가 필요할 때 |
🚀 추천
var을 사용하되, 타입 변경이 필요한 경우에만 dynamic을 사용하는 것이 좋습니다! 😊