Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# var와 dynamic 키워드의 차이점 완벽 정리

C#에서는 변수를 선언할 때 명시적인 타입 대신 var 또는 dynamic 키워드를 사용할 수 있습니다. 두 키워드 모두 타입을 미리 지정하지 않고 변수를 선언한다는 점에서 비슷해 보이지만, 동작 방식과 타입 검사 시점이 완전히 다릅니다. 이 글에서는 두 키워드의 차이점을 예제 코드와 함께 자세히 살펴보겠습니다.

dynamic 키워드란?

dynamic 키워드로 선언된 변수에는 정수, 문자열, 실수 등 어떤 타입의 값이든 저장할 수 있습니다. 가장 중요한 특징은 타입 검사가 컴파일 시점이 아닌 런타임(실행 시점)에 수행된다는 점입니다. 즉, dynamic 변수는 동적 타이핑(dynamically typed) 방식으로 동작합니다.

dynamic 선언 문법

dynamic <변수명> = 값;

dynamic 사용 예제

dynamic val1 = 100;
dynamic val2 = 5;
dynamic val3 = 20;

dynamicobject 타입과 유사하지만 결정적인 차이가 있습니다. 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 핵심 차이점 비교

구분vardynamic
타입 결정 시점컴파일 시점런타임(실행 시점)
타입 변경 가능 여부불가능 (초기화 후 고정)가능 (다른 타입 재할당 허용)
초기화 필수 여부선언 시 반드시 초기화 필요초기화 없이 선언 가능
IntelliSense 지원완전히 지원됨제한적으로 지원됨
오류 발견 시점컴파일 시 타입 오류 감지실행 중에 오류 발생

정리

var는 컴파일 시점에 타입이 확정되는 안전한 정적 타이핑 방식이므로, 일반적인 상황에서 코드 간결성을 위해 권장됩니다. 반면 dynamic은 런타임에 타입이 결정되므로 COM 개체, JSON 파싱, 리플렉션 등 타입을 사전에 알 수 없는 특수한 경우에 유용합니다. 단, dynamic은 컴파일러의 타입 검증을 받지 못하기 때문에 남용하면 런타임 오류 위험이 커지므로 신중하게 사용해야 합니다.