[C#] var형식


C#은 변수나 상수에대해 깐깐하게 형식 검사를 하는 강력한 형식의 언어이다.

하지만, 약한 형식 검사를 지원해주기도 한다. 바로 var라는 키워드 이다.


강력한 형식검사 

- 강력한 형식 검사는 프로그래머의 실수를 줄여주는 장점이 있다.

- 의도치 않은 형식의 데이터를 읽거나 할당하는 일을 막아준다.


약한 형식검사(var)

- 자동으로 해당 변수의 형식을 지정해준다.

- int, long, unit, ulong 같은 형식을 외울 필요가 없다.

- 변수의 선언과 동시에 초기화 해야한다.

- 지역 변수로만 사용할 수 있다.



var키워드를 사용해 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
 
namespace UsingVar
{
    class MainApp
    {
        static void Main(string[] args)
        {
            var a = 20;
            Console.WriteLine("Type {0}, Value {1}", a.GetType(), a);
            // 결과 : Type: System.Int32, Value: 20
 
            var b = 3.14;
            Console.WriteLine("Type {0}, Value {1}", b.GetType(), b);
            // 결과 : Type: System.Double, Value: 3.14
 
            var c = "헬로우 월드?";
            Console.WriteLine("Type {0}, Value {1}", c.GetType(), c);
            // 결과 : Type: System.String, Value: 헬로우 월드?
        }
    }
}
cs



배열도 사용 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
 
namespace UsingVar
{
    class MainApp
    {
        static void Main(string[] args)
        {
            var a = new int[] {10,20,30};
            Console.WriteLine("Type {0}, Value: ", a.GetType());
            
            foreach(var e in a)
                Console.Write("{0} ", e)
            Console.WriteLine();
 
            // 결과 : Type: System.Int32[], Value: 10 20 30
        }
    }
}
cs




var형식과 object형식


위의 예제코드를 object형식으로도 작성이 가능하다.

그럼 var와 object는 같은거 아닌가? 라고 생각할수도 있지만.


아니다.


object a = 20;

이라는 코드가 있다고 하자.

컴파일이 실행되면 20은 박싱되어 힙에 들어가고 a는 힙을 가르키게 된다.


var a = 20;은 컴파일러가 a의 형식을 파악한다. 

int a = 20;으로 바꿔 컴파일 시킨다.

컴파일이 실행되면 a를 스택에 올려놓게 된다.


두 개의 형식은 명확히 다른거라고 알아두자.