C#에서는 변수를 선언할 때 명시적인 타입 대신 var 또는 dynamic 키워드를 사용할 수 있습니다. 두 키워드 모두 타입을 미리 지정하지 않고 변수를 선언한다는 점에서 비슷해 보이지만, 동작 방식과 타입 검사 시점이 완전히 다릅니다. 이 글에서는 두 키워드의 차이점을 예제 코드와 함께 자세히 살펴보겠습니다.
dynamic 키워드란?
dynamic 키워드로 선언된 변수에는 정수, 문자열, 실수 등 어떤 타입의 값이든 저장할 수 있습니다. 가장 중요한 특징은 타입 검사가 컴파일 시점이 아닌 런타임(실행 시점)에 수행된다는 점입니다. 즉, dynamic 변수는 동적 타이핑(dynamically typed) 방식으로 동작합니다.
dynamic 선언 문법
dynamic <변수명> = 값;
dynamic 사용 예제
dynamic val1 = 100; dynamic val2 = 5; dynamic val3 = 20;
dynamic은 object 타입과 유사하지만 결정적인 차이가 있습니다. object 타입 변수의 타입 검사는 컴파일 시점에 이루어지는 반면, dynamic 타입 변수의 타입 검사는 런타임에 수행됩니다. 따라서 dynamic을 사용하면 컴파일러가 타입 오류를 잡아주지 못하고, 잘못된 연산이 있을 경우 실행 중에 예외(RuntimeBinderException)가 발생할 수 있습니다.
var 키워드란?
var 키워드는 변수를 초기화하는 값을 기준으로 컴파일러가 자동으로 타입을 추론하도록 합니다. 정수, 문자열, 실수 등 원하는 값을 할당하면 해당 값에 맞는 타입이 결정됩니다. var로 선언된 변수는 정적 타이핑(statically typed) 방식으로, 한 번 타입이 결정되면 다른 타입의 값을 저장할 수 없습니다.
var 사용 예제
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
var myInt = 5;
var myString = "Amit";
Console.WriteLine("Rank: {0} \nName: {1}", myInt, myString);
}
}
}
실행 결과
Rank: 5 Name: Amit
var와 dynamic 핵심 차이점 비교
| 구분 | var | dynamic |
|---|---|---|
| 타입 결정 시점 | 컴파일 시점 | 런타임(실행 시점) |
| 타입 변경 가능 여부 | 불가능 (초기화 후 고정) | 가능 (다른 타입 재할당 허용) |
| 초기화 필수 여부 | 선언 시 반드시 초기화 필요 | 초기화 없이 선언 가능 |
| IntelliSense 지원 | 완전히 지원됨 | 제한적으로 지원됨 |
| 오류 발견 시점 | 컴파일 시 타입 오류 감지 | 실행 중에 오류 발생 |
정리
var는 컴파일 시점에 타입이 확정되는 안전한 정적 타이핑 방식이므로, 일반적인 상황에서 코드 간결성을 위해 권장됩니다. 반면 dynamic은 런타임에 타입이 결정되므로 COM 개체, JSON 파싱, 리플렉션 등 타입을 사전에 알 수 없는 특수한 경우에 유용합니다. 단, dynamic은 컴파일러의 타입 검증을 받지 못하기 때문에 남용하면 런타임 오류 위험이 커지므로 신중하게 사용해야 합니다.