티스토리 뷰
이 글에서는 C#에서 선언할 수 있는 명시적선언과 암시적선언에 대해서 알아보도록 하겠습니다. 명시적선언은 Explicit라는 용어를 많이들 쓰고, 암시적선언은 Implicit라는 말을 많이 씁니다.
이 두가지 선언 방법의 차이는 바로 변수 선언시 타입을 같이 선언하느냐 하지 않느냐인데요.
- Explicit : 변수의 타입을 지정하지 않고 var라는 타입을 통해서 선언합니다.
- Implicit : 변수의 타입을 지정해야 합니다.
.NET에서 또한 Explicit와 Implicit 모두 지원을 하고 있습니다.
간단히 int형의 데이터 타입 변수를 선언하고자 한다면 사용자는 아래와 같이 변수를 선언할 수 있습니다.
int i = 0; //명시적 선언(Explicit)
하지만 var라는 명령어를 통해서도 C#에서는 변수 선언이 가능합니다.
var를 이용하게 되면 컴파일러는 선언시에 할당되는 데이터를 보고 데이터 타입을 컴파일 타임에서 결정을 합니다.
암시적 선언 방식은 아래의 코드와 같습니다.
var v = 0; //암시적 선언(implicit)
위의 코드에서 우리는 v라는 변수에 0을 할당하였습니다. IL 코드가 생성이 될 때 var라는 데이터 타입은 int 타입으로 변형이 됩니다.
var는 컴파일 타임시에 데이터타입을 결정을 합니다. 따라서 var로 선언된 변수에 null이라는 object의 빈 값을 넣을 수 없습니다.
그 이유는 어떠한 데이터형인지 알 수 없기 때문이죠.
Var는 무엇인가?
var는 .NET 프레임워크 3.0버전에서 새로이 나온 개념으로, 닷넷이 사용할 수 있는 대부분의 데이터 타입을 사용할 수가 있습니다. 위에서 말한 것과 같이 .NET 프레임워크 환경에서도 암시적타입 선언이 가능하게 된것이죠. 이는 익명 타입(Anonymous Type)을 위해서 추가적으로 지원이 되게끔 만들었다고 볼 수 있습니다.
왜 Var를 사용해야 하는가?
var가 필요한 가장 큰 이유는 익명 타입(Anonymous Type)가 함께 LINQ를 사용할 때 필요합니다. var 타입은 사용자가 개발하는 코드를 간단하고 빠르게 만들게 도움을 줍니다.
LINQ의 예를 통해서 살펴보도록 합시다.
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
class Details
{
public int Length;
public string Value;
}
class LINQ
{
static void Main(string[] args)
{
string[] Names = {
"영수", "철수", "영희"
};
IEnumerable < Details > details = from x in Names select new Details
{
Length = x.Length, Value = x
};
foreach(Details d in details)
{
Console.Write(string.Format("Name : {0}, Length : {1}\n", d.Value, d.Length));
}
System.Threading.Thread.Sleep(2000);
}
}
}
위의 코드는 LINQ 쿼리를 통해서 받을 Details라는 테이터 타입을 만들었습니다. 이 코드의 가장 큰 문제는 코드의 길이가 길어지고, 클래스를 만들어야 한다는 점이죠.
또한 IEnumerable 인터페이스를 사용해야 합니다.
하지만 위의 코드를 var 타입으로 사용하게 되면 아래와 같이 코드가 간결해 집니다.
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
class LINQ
{
static void Main(string[] args)
{
string[] Names = {
"영수", "철수", "영희"
};
var v = from x in Names select new
{
Length = x.Length, Value = x
};
foreach(var d in v)
{
Console.Write(string.Format("Name : {0}, Length : {1}\n", d.Value, d.Length));
}
System.Threading.Thread.Sleep(2000);
}
}
}
그럼 이만 줄이겠습니다.
열공하세요.
이 글이 도움이 되셨으면, 아래의 하트를 눌러주세요.
'프로그래밍 팁s > C#, .NET' 카테고리의 다른 글
[C# 강좌] C# Var와 다이나믹(Dynamic)에 대해서 이해하기 (1) | 2016.04.11 |
---|---|
C# 강좌 - typeof 키워드와 GetType 함수의 차이는 무엇일까? (1) | 2015.11.20 |
C# 강좌 - CLR을 이용한 안전한 코드가 가장 좋다 (Trust Level) (0) | 2015.11.19 |
C# 팁, Visual Studio 디버깅할 때 파라미터 전달 방법 (0) | 2015.10.19 |
C# 효율적으로 사용하기 - For문이 Foreach문보다 빠르다. (2) | 2015.10.18 |