[ var ]
var에 대해서 정리해봅시다!
C++에서도 'auto'라는 키워드가 있었는데, C#에서도 'auto'와 비슷한 기능을 하는 'var'가 존재합니다.
var a = 3;
var b = "string";
var를 사용해서 변수를 선언하면 컴파일러가 자동으로 해당 변수의 형식을 지정해줍니다.
이러한 키워드는 왜 사용하는지 항상 의문이 들었는데, 변수의 형식이 긴 경우에 간단하게 해 준다는 장점이 있습니다.
C++에서는 iterator 같은 형식을 지정할 때 생각보다 길게 되는데 이러한 형식을 줄여주는 것처럼 말이죠.
vector<int> v;
vector<int>::iterator iter = v.begin();
// 간단해진 타입명
auto iter = v.begin();
vector<pair<pair<int, int>, double> > v2;
for(auto iter = v2.begin(); iter != v2.end(); iter++)
{
}
C#도 비슷하게 축약이 가능합니다.
class Program
{
static void Main()
{
Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();
List<int> a = new List<int>();
a.Add(1);
a.Add(2);
List<int> b = new List<int>();
a.Add(3);
a.Add(4);
dict.Add(1, a);
dict.Add(2, b);
foreach (var list in dict)
{
foreach (var num in list.Value)
{
Console.WriteLine($"Key:{list.Key} Value:{num}");
}
}
}
}
이렇게 편리한 var도 주의할 점이 있습니다.
# var를 이용해서 변수를 선언하려면 선언과 동시에 초기화가 필요합니다.
그래야지 컴파일러가 데이터를 보고 형식을 추론하여 지정하기 때문이죠.
# var는 지역 변수로만 사용할 수 있습니다.
가만히 생각해보면, 클래스의 필드를 선언할 때는 반드시 명시적 형식을 선언해야 합니다.
생성자를 통해서 초기화를 하는 부분이 대부분이기 때문에 만약에 var로 선언하면 컴파일러가 무슨 형식인지 알 수 없기 때문입니다.
[ 연습해보기 ]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class Program
{
static void Main()
{
var a = 20;
Console.WriteLine($"Type:{a.GetType()} Value:{a}");
var b = 3.141592;
Console.WriteLine($"Type:{b.GetType()} Value:{b}");
var c = "Programming C#";
Console.WriteLine($"Type:{c.GetType()} Value:{c}");
var d = new int[] { 10, 20, 30 };
Console.WriteLine($"Type:{d.GetType()} Value:{d}");
foreach(var e in d)
{
Console.Write($"{e} ");
}
Console.WriteLine();
}
}
[ 실행 결과 ]
Type:System.Int32 Value:20
Type:System.Double Value:3.141592
Type:System.String Value:Programming C#
Type:System.Int32[] Value:System.Int32[]
10 20 30
'CS > C#' 카테고리의 다른 글
[C#] 클래스 (0) | 2021.12.11 |
---|---|
[C#] 문자열 찾기 함수들 (0) | 2021.12.10 |
[C#] foreach (0) | 2021.12.05 |
[C#] null 병합 연산자, ?? (0) | 2021.12.05 |
[C#] IsNullOrEmpty (0) | 2021.11.19 |