CS/C#

[C#] var

Mirab 2021. 12. 10. 01:01

[ 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