C# 8 : using 선언
using 선언은 using 키워드 뒤에 오는 변수 선언으로서, using 뒤에 있는 변수가 using을 둘러싼 범위를 벗어날 경우 Dispose 하도록 컴파일러에게 지시하게 된다. 기존의 using문을 사용할 경우 괄호 {...} 를 표시해야 했는데, using 블럭 전체를 들여쓰기 해야 하는 불편함이 있었다. using 선언은 (별도의 괄호를 메서드 내부에 사용하지 않는 한) 통상 메서드가 끝날 때 Dispose() 를 자동 호출하게 해 준다. 물론 경우에 따라 긴 메서드 안에 특정 부분에서만 using을 사용하고 빨리 Dispose() 해 주어야 한다면, 기존의 using문을 사용할 수 있다.
아래 예제에서 GetDataCS8() 메서드는 C# 8.0의 using 선언을 예시한 것으로 StreamReader 객체 변수인 reader는 메서드 끝에서 reader.Dispose()를 호출하게 된다. GetData() 메서드는 기존에 사용했던 using 문을 예를 든 것으로 이 메서드에서 reader.Dispose()는 메서드 끝이 아닌 using 블럭이 끝나는 부분에서 호출되게 된다.
아래 예제에서 GetDataCS8() 메서드는 C# 8.0의 using 선언을 예시한 것으로 StreamReader 객체 변수인 reader는 메서드 끝에서 reader.Dispose()를 호출하게 된다. GetData() 메서드는 기존에 사용했던 using 문을 예를 든 것으로 이 메서드에서 reader.Dispose()는 메서드 끝이 아닌 using 블럭이 끝나는 부분에서 호출되게 된다.
예제
// C# 8.0
private void GetDataCS8()
{
using var reader = new StreamReader("src.txt");
string data = reader.ReadToEnd();
Debug.WriteLine(data);
// 여기서 Dispose() 호출됨
}
// C# 모든 버전
private void GetData()
{
using (var reader = new StreamReader("src.txt"))
{
string data = reader.ReadToEnd();
Debug.WriteLine(data);
} // 여기서 Dispose() 호출됨
// ...
Debug.WriteLine("...");
}
private void GetDataCS8()
{
using var reader = new StreamReader("src.txt");
string data = reader.ReadToEnd();
Debug.WriteLine(data);
// 여기서 Dispose() 호출됨
}
// C# 모든 버전
private void GetData()
{
using (var reader = new StreamReader("src.txt"))
{
string data = reader.ReadToEnd();
Debug.WriteLine(data);
} // 여기서 Dispose() 호출됨
// ...
Debug.WriteLine("...");
}