Programing/dotnet core

지역변수 & 지역변수 추론 (var type)

Ezzi 2020. 3. 10. 09:24
반응형

지역변수

 

지역변수는 메서드 안에서 선언되는 변수를 말합니다. 

 

메서드가 호출되는 동안만 존재하며 메서드가 끝나는 순간 지역 변수에 할당된 메모리도 해제됩니다. 

 

엄밀히 말하자면 닷넷에서는 지역변수라 하더라도 vlaue타입은 바로 해제되지만 reference타입은 가비지 컬렉션에서 해제되기를 기다립니다. 

 

 

int maxNumber = 12345;
double weight = 68.2;
decimal price = 5.0M;
string name = "steve jobs";
char temp = 'Z';
bool isOk = false;

 

지역변수 추론 

 

var 타입은 지역변수를 선언할 때 사용할 수 있습니다. 

 

컴파일러는 대입 연산자 = 다음에 쓰인 리터럴 값으로 부터 실제 값을 추론합니다. 

 

1. 소수점이 없는 = int

2. 소수점이 있는 = double

3. 접미사 L = long

4. 접미사 M = decimal

5. 접미사 F = float

 

다음과 같은 컨텍스트에서도 사용할 수 있습니다. 

// for
for(var i = 1; i < 5; i++)
{...}

// foreach
foreach(var item in array) 
{...}

// using 
using (var file = new StreamReader("c:\\temp.txt"))
{...}

 

 

그렇다면 var 타입이란 왜 존재 할까요?

 

msdn 에서도 이렇게 정의 하고 있습니다. 

 

"대부분의 경우 var 사용은 선택 사항이며 단지 편리한 구문을 위해 사용합니다. "

 

...

 

"그러나 var을 사용하면 최소한 다른 개발자가 코드를 이해하기 더 어려워질 수 있습니다. 이런 이유로, C# 문서에서는 일반적으로 필요한 경우에만 var을 사용합니다."

 

저는 개인적으로 명시적 코딩을 해주는게 더 좋다고 생각합니다.

 

// 1번
XmlDocument xml1 = new XmlDocument();
var xml2 = new XmlDocument();

// 2번
var file1 = File.CreateText(@"c:\temp\something.txt");

 

1번의 경우 

XmlDocument를 불필요 하게 2번 반복하는 것 보다는 var로 쓰면 편리 합니다.

 

2번의 경우

file1이 어떤 타입인지 확인해야 합니다. 

StreamWriter file1 = File.CreateText(@"c:\temp\something.txt");

따라서 2번은 다음과 같이 코딩을 해야 다른 사람이 보더라도 쉽게 알수가 있습니다. 

 

 

반응형