Dart(플러터) var, dynamic 차이

Dart(플러터)에서 vardynamic의 차이를 정리해드리겠습니다.


1. var vs dynamic 기본 개념

키워드특징타입 고정 여부타입 체크
var타입 추론O (초기값 기준으로 고정됨)컴파일 시점에 타입 체크
dynamic동적 타입X (값에 따라 타입 변경 가능)런타임 시 타입 체크

2. 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과 유사하게 동작하지만, 자동 타입 체크는 유지됨.

3. dynamic (완전한 동적 타입)

  • dynamic어떤 타입이든 저장 가능하며, 타입이 계속 바뀔 수 있음.
  • 컴파일러가 타입을 체크하지 않고, 런타임에서 오류가 발생할 수 있음.
void main() {
  dynamic value = "Hello";
  value = 42; // ✅ 가능 (타입 변경 가능)
  value = true; // ✅ 가능

  print(value.length); // ❌ 오류 발생 (boolean에는 length 속성이 없음)
}

📌 정리

  • 타입이 계속 바뀌어야 하는 경우 사용 (ex: JSON 데이터, API 응답 처리).
  • 컴파일 시 타입 검사가 없으므로 주의해야 함.

4. 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는 모든 타입을 저장할 수 있지만, 메서드 호출 시 asis로 타입 변환이 필요함.


5. 언제 var, dynamic을 써야 할까?

var을 사용하는 경우:

  • 타입이 고정된 경우 (String, int, List<String> 등).
  • 코드에서 명확한 타입을 유지하고 싶을 때.

dynamic을 사용하는 경우:

  • JSON 데이터를 다룰 때 (Map<String, dynamic>).
  • 다양한 타입의 값이 들어올 수 있는 경우.
  • API 응답을 처리할 때.

6. 결론

키워드언제 사용해야 하나?
var일반적인 경우, 타입을 자동 추론하지만 변경하지 않을 때
dynamic타입이 유동적으로 변할 필요가 있을 때 (JSON, API 응답 등)
Object모든 타입을 받을 수 있지만, 안전한 타입 체크가 필요할 때

🚀 추천

  • 대부분의 경우 var을 사용하되, 타입 변경이 필요한 경우에만 dynamic을 사용하는 것이 좋습니다! 😊
profile
AI 답변 글을 주로 올립니다.

0개의 댓글