프로그래밍/(도서)C#코딩의기술-실전

[C#] 코딩의기술(실전편) - 4.1 var VS object VS dynamic

Victory_HA 2022. 3. 31. 22:32

var

  • 어떠한 타입이라도 변수로 선언하여 사용할 수 있습니다.
  • var 형식은 최초 초기화되어 타입이 정해진 이후에는 타입을 변경할 수 없습니다.
  • null로는 초기화 할 수 없습니다.
  • 선언 시점에 특정 타입으로 초기화 되어야 합니다.
  • var 타입은 선언 시점에서 타입을 추정하기 때문에 인텔리센스가 완벽하게 지원 됩니다.

var 인텔리센스

  • 데이터형의 속성 확인이 가능합니다.

object

  • 어떠한 타입이라도 변수로 선언하여 사용할 수 있습니다.
  • 값 형식 -> 참조형식, 참조형식 -> 값 형식으로 형 변환을 할 경우 박싱(boxing : 값형식 -> 참조형식), 언박싱(unboxing : 참조형식 -> 값형식) 과정이 일어나며, 성능상 영향을 미칠 수 있습니다.

object 인텔리센스

  • 데이터형의 속성 확인이 불가능합니다.
  • 선언된 값은 object 그 자체 입니다.

dynamic

  • 어떠한 타입이라도 변수로 선언하여 사용할 수 있습니다.
  • 컴파일 시점에 타입에 대한 확인을 하지 않기 때문에 개발 시점에서 인텔리센스는 동작하지 않습니다.

dynamic 인텔리센스

  • 데이터형의 속성 확인이 불가능합니다.
  • 인텔리센스 동작하지 않습니다.

var, dynamic, object 공통점

  • 선언 시점에 다양한 타입을 지정할 수 있다.

(var, dynamic) vs object 차이점

  • var, dynamic은 선언된 원본 형식을 유지합니다.
  • object는 선언된 원본의 특성을 유지하지 못합니다.
    • 인텔리센스에서 적용되는 데이터형의 속성을 확인할 수 없습니다.
    • object로 선언 되었다가 원본 형식으로 바꾸기 위해서는 반드시 형변환 처리가 필요합니다.

var vs dynamic 차이점

  • 타입이 확정되는 시점이 다릅니다.
  • var 형식은 컴파일 시점에 타입을 확정합니다.
  • dynamic 형식은 런타임 시점에 타입을 확정합니다.
  • dynamic 형식으로 사용하는 값이 올바르지 않은 타입이 지정이 되더라도 컴파일 시점에서는 모두 by-pass 되며, 런타임 시점에 예외를 발생하게 됩니다.

dynamic 속도 비교 테스트