C#.VAR

C#/var.dynamic.object 2018. 2. 2. 16:49

[ var ]


1. 정의

   C# 3.0에서 새롭게 등장한 형식으로 자바스크립트를 개발한 경험이 있다면 이미 본적이 있을 것이다. 

   자바스크립트와 마찬가지로 var로 선언된 변수는 모든 형식을 사용할 수 있지만, 

   차이점은 한번 선언된 형식은 불변으로 선언된 이후에 다른 형식의 값으로 설정 할 수 없다.


   그럼 왜 var 형식이 나오게 된 것일까? 이전 장에서 Nullable 형식에 대해 살펴 보았을 것이다. 

   이와 마찬가지로 var 형식도 DB처리와 연관이 있다. 우리가 인라인 쿼리를 작성하는 것을 생각해 보자. 

   하나의 테이블에서 조회를 할 경우도 있지만, 특정 컬럼만 가지고 오거나, 

   여러 테이블과 조인을 하여 보고자 하는 형태로 쿼리를 작성하는 경우가 더 많을 것이다.


   그럼 그 조회된 결과는 물리적으로 DB에 존재하는 테이블인가? 아니다. 

   쿼리가 발생할 때 마다 동적으로 생성되는 것이다. 

   그럼 그 조회된 결과를 C# 코드에서 받을 때는 어떻게 처리 하여야 될까? 

   C# 3.0 이전에는 DataTable이란 곳에 담거나, 

   쿼리 컬럼과 일치하는 클래스를 미리 생성해 놓아야 했다. 만약 조회 쿼리가 동적으로 변한다면? 이 또한 난감함 문제이다. 

   이럴 경우 익명 형식(anonymous type)과 함께 사용하게 되면 위에서 했던 고민이 해결 된다. 

   익명 형식은 인라인 쿼리 결과처럼 클래스를 명시적으로 선언하지 않고도 사용하고자 하는 시점에 동적으로 생성이 가능하다. 

   이렇게 동적으로 생성된 익명 형식을 var 타입으로 선언 변수 값으로 설정하면 되는 것이다. 

   익명 형식은 다음 장에서 좀더 자세히 살펴 볼 수 있다.


   var 형식은 모든 형식을 설정할 수 있지만 컴파일 시점에 형식이 확정 되므로 성능상의 이슈는 없다.


2. 사용 가능한 형식

   내장 형식(built-in type) : int, string 등

   익명 형식(anonymous type)

   사용자 정의 형식(user-defined type) : class, struct 등

   .NET FCL : Stream, List<T> 등

 


3. 선언시 유의사항

   var temp;         //초기화기 되지 않음

   var temp = null;     //특정한 형식을 가져야 함.

   메서드의 파라미터로 사용할 수 없음

Posted by 농부지기
,