C# - var 키워드는 무엇인가
이번에 C#을 배우면서 처음 보는 키워드인 var를 한번 알아보고자 글을 써보려고 합니다. 우리가 변수를 선언할 떄는 앞에 키워드를 붙여서 어떤 형식인지 명시를 해주어야합니다.
위와 같이 정수형은 int, 문자형은 char 그리고 문자열은 string 이라는 형식으로 선언해서 변수를 만들게 됩니다.
그런데 var라는 키워드를 사용해서 변수를 만들게 되면, var키워드 뒤에 문자열이든 정수든 실수든 무엇을 넣던 간에 상관이없습니다. 바로 이 var키워드의 기능은 변수의 자료형을 자동으로 저장하는 것 입니다.
c# var 사용방법
var [변수명] = [초기화 해줄 값] ;
위와 같이 c#에서 var키워드를 사용할 수 있습니다. 저는 자료형을 지정하지 않고 var키워드를 사용해서 초기화 했습니다. 이때 초기화를 하게되면 초기화한 자료형으로 영구적으로 자료형이 결정됩니다. 예를 들어서 number는 int32형 자료형으로 지정되며 한번 지정되면 바꿀 수 없기 때문에 다른 형식의 자료형은 대입을 하지 못합니다.
위 코드를 실행하였을 때 나타나는 결과화면입니다. 100으로 값을 준 number변수는 Int32라는 형식을 가졌고, 3.14라는 실수형 값을 준 number2는 double형식을 갖게되었습니다. 또 문자형식인 'A'를 값으로 준 cha는 char형식을 갖게되었습니다. 그리고 마지막으로 "hello"라는 문자열로 초기화를 해준 strin이라는 변수는 string이라는 형식으로 지정이 된 것을 확인 할 수 있습니다. (※참고: .GetType()는 현재 인스턴스의 자료형인 system.type을 가져오는 매소드입니다.)
일일이 변수가 가질 형들을 지정해 주지 않았는데도 알아서 척척 맞추어 주니 참 편리한 키워드 인 것 같습니다. 역시 c#은 뭔가 다른 것 같군요.
var 키워드 사용시 주의사항
지역 변수로 선언해야 함
선언과 동시에 초기화작업이 필요함
var키워드 사용시에는 위 두가지 조건을 만족해야 합니다. 위 사진에서 보이듯 지역변수로 선언해주지 않으면 형식또는 네임스페이스 이름을 찾을 수 없다면서 오류가 뜨게 됩니다. C#에서는 매서드(함수, 괄호가 있는녀석) 내부에 선언이된 변수를 지역변수라고 부르고있습니다. 즉, 위 사진에서 global이라는 변수는 매서드가아닌 클래스 하위에서 선언되었기 때문에 오류가 발생합니다.
또 중요한 것은 바로 선언과 동시에 초기화작업을 해주어야 한다는 것입니다. 만약에 초기화 값이 없다면 사용할 수 없습니다. 왜냐하면 int를 이용해서 변수를 만들면 사실 어떤 것을 쓸건지 알고 형(type)이 미리 정해지기 때문에 선언동시에 초기화를 안해줘도 되지만, var를 쓰게되면 어떤 건지도 모르는데 처음에 아무것도 주지 않으면 녀석이 당황하게 되겠죠.. 그래서 초기화가 필요없는 변수는 그냥 형을 정해서 선언하는 게 좋습니다.
공식적인 오류내용으로 설명하자면 암시적으로 형식화된 지역변수는 초기화 해야한다는 것 으로 기억하시면 될 것 같네요. 이런 문법적은 사항은 아주 기본적으로 지켜야하는 것 이기 때문에 꼭 숙지하고 있으시기 바랍니다.
var 키워드의 선언
그런데 정수의 경우 int가아닌 long형이있고, 실수의 경우 double이 아닌 float형이 있는데 이럴 때는 어떻게 초기화를 해야할 까요?
이럴 경우에는 바로 명시적으로 뒤에 어떤 자료형인지 기호를 붙여야합니다. 사실 숫자만 가지고 우리가 같은 정수타입의 어떤 형식을 쓸건지 컴퓨터는 모르기 때문에 알려주어야 하는 것이죠. long형은 숫자뒤에 L을 붙여주시면 되고, float자료형은 뒤에다가 F를 붙여주면된답니다. 아직은 컴퓨터가 우리가 하고있는 생각까지 읽을 정도로 똑똑 하진 않은 것 같습니다.
결과화면입니다. 보면알 수 있듯이 지정해준 롱형과 플로트형으로 시스템타입이 지정된 것을 알 수 있습니다.
이렇게 C#프로그래밍 언어에서 사용되고있는 var키워드에 대해서 알아봤습니다.
@HTML a태그 속성(href, target,id 속성) 뽀개기 02
'C#(.NET)' 카테고리의 다른 글
[c#] foreach 반목문 갖다뽀개버리기 (8) | 2017.10.20 |
---|---|
[오류해결] 코드 경로 중 일부만 값을 반환합니다. (1) | 2017.10.19 |
[C#] 속성 겟터와 셋터(get, set)키워드 알아보자 (6) | 2017.10.16 |
[C#] readonly 키워드를 알아보자 (0) | 2017.10.15 |
[C#] 인스턴스변수와 클래스변수 (6) | 2017.10.13 |