Dart에서는 변수를 선언할 때 var와 dynamic 키워드를 사용할 수 있습니다. 하지만 두 키워드는 서로 다른 특징을 가지며, 잘못 사용하면 원하지 않는 동작이 발생할 수도 있습니다. 이번 포스팅에서는 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를 기본적으로 사용하자
- 다양한 타입의 값을 하나의 변수에 저장해야 할 때
- 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의 차이를 이해하고, 상황에 맞게 적절하게 사용하는 것이 중요합니다! 😊