[Dart] var와 dynamic 변수 차이점 완벽 정리

Dart에서는 변수를 선언할 때 vardynamic 키워드를 사용할 수 있습니다. 하지만 두 키워드는 서로 다른 특징을 가지며, 잘못 사용하면 원하지 않는 동작이 발생할 수도 있습니다. 이번 포스팅에서는 var와 dynamic의 차이점과 사용 시 주의할 점에 대해 알아보겠습니다.

 

 

1. var 키워드

1.1 var의 기본 개념

var 키워드는 변수를 선언할 때 사용되며, 한 번 타입이 결정되면 변경할 수 없습니다. 즉, 초기 값의 타입에 따라 자동으로 타입이 추론됩니다.

void main() {
  var name = "Dart";  // String으로 추론됨
  // name = 123;  // String 타입으로 결정되었기 때문에 숫자를 넣으면 오류 발생

  var age = 30;  // int로 추론됨
}

위 예제 코드에서 name 변수는 String으로, age 변수는 int로 타입이 자동 결정됩니다. 이후 해당 변수에는 같은 타입의 값만 할당할 수 있습니다.

 

1.2 var의 제한사항

  • 한 번 타입이 정해지면 변경할 수 없음.
  • 런타임 타입 변경이 불가능하여 타입 안정성이 보장됨.
  • 가독성이 좋고, IDE의 자동 완성이 유리하게 작동함.

 

 

2. dynamic 키워드

2.1 dynamic의 기본 개념

dynamic 키워드는 변수의 타입을 런타임에 동적으로 결정하도록 합니다. 즉, 어떠한 타입도 저장할 수 있으며, 변경할 수도 있습니다.

void main() {
  dynamic value = "Hello";
  print(value); // Hello

  value = 42;   // 타입 변경 가능
  print(value); // 42

  value = true; // 또 다른 타입으로 변경 가능
  print(value); // true
}

 

2.2 dynamic의 장단점

장점:

  • 하나의 변수에 다양한 타입 저장 가능
  • 타입을 명확하게 정의하기 어려운 경우 유용

단점:

  • 타입 안정성이 떨어지며, 코드 실행 시 타입 에러가 발생할 가능성이 있음.
  • IDE의 자동 완성 기능을 충분히 활용하기 어려움.

 

 

3. var vs dynamic 비교

키워드타입  고정 여부 타입 안정성 타입 변경 가능 여부 사용 예
var 고정 높음 불가능 대부분의 일반적인 변수
dynamic 유동적 낮음 가능 API 응답, 다양한 타입 처리 필요 시

 

 

4. 언제 var와 dynamic을 사용할까?

  • var를 사용하는 경우
    • 변수의 타입이 한 번 정해지면 변경되지 않을 때
    • 코드의 가독성을 높이고 타입 안정성을 유지하고 싶을 때
    • 일반적인 경우에는 var를 기본적으로 사용하자
    dynamic을 사용하는 경우
    • 다양한 타입의 값을 하나의 변수에 저장해야 할 때
    • JSON 파싱처럼 데이터 타입을 미리 알 수 없는 경우
    • 특정 API에서 여러 타입의 값을 반환할 때

예제: dynamic이 필요한 경우

void printValue(dynamic value) {
  print("전달된 값: $value");
}

void main() {
  printValue("Dart");
  printValue(100);
  printValue(true);
}

이처럼 함수의 매개변수가 여러 타입을 받을 수 있어야 할 때 dynamic이 유용할 수 있습니다.

 

 

결론

Dart에서 var는 타입이 자동으로 결정되며, 이후 변경할 수 없는 타입 안전한 변수입니다. 반면 dynamic은 모든 타입을 수용할 수 있지만, 타입 안정성이 떨어지는 단점이 있습니다. 일반적으로는 var를 사용하고, 타입이 유동적인 경우 dynamic을 활용하는 것이 좋습니다.

이제 var와 dynamic의 차이를 이해하고, 상황에 맞게 적절하게 사용하는 것이 중요합니다! 😊