반응형
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 블럭이 끝나는 부분에서 호출되게 된다.
이는 C++에서 자원할당 이후에 해당 구문을 빠져나가면 소멸자가 호출되어서 자원이 해제되는 것과 동일하게 using 선언시에 구문이 끝나는 부분에서 Dispose()가 호출된다.
예제
// 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("...");
}
출처
'프로그래밍 > C#' 카테고리의 다른 글
BitConverter.ToInt16 메서드에 대해서 (1) | 2024.01.08 |
---|---|
C# List Sort()를 사용해서 정렬하기 (1) | 2023.11.23 |
Json 작성 시 JavaScriptEncoder.UnsafeRelaxedJsonEscaping 옵션에 대해서 (1) | 2023.11.09 |
C# IDisposable에 대해서 (1) | 2023.11.03 |
C# Convert 메서드 (0) | 2023.10.12 |
댓글