IDisposable 인터페이스와 Dispose() 메서드
2021. 12. 29. 12:13ㆍC#
Dispose() 메서드를 호출하면 관리되지 않는 리소스를 해제하고, 일반 정리를 수행한다. 또한, 종료자가 있는 경우엔 종료자를 실행할 필요가 없음을 나타내주기도 한다.
관리되는 개체와 관련된 실제 메모리를 해제하는 것은 가비지 수집기의 역할이므로 이런 점에서 가비지 수집기와는 다르다.
public void Dispose()
{
// Dispose of unmanaged resources.
Dispose(true);
// Suppress finalization.
GC.SuppressFinalize(this);
}
이런 식으로 구현하는 것이 일반적인데 여기에서 SuppressFinalize 메서드는 가비지 수집기가 종료자를 실행하지 않도록 방지하여 중복으로 가지비 수집이 호출되지 않도록 해준다. 실제 정리는 Dispose 메서드에 의해 수행된다.
IDisposable 인터페이스를 상속받은 클래스가 using 구문을 탈출할 때 자동으로 Dispose 메서드를 호출하므로
using (StreamReader sr = new StreamReader(filename)) {
txt = sr.ReadToEnd();
}
IDisposable 인터페이스를 상속받는 StreamReader 클래스를 이와 같은 형태로 사용하면 명시적으로 Dispose 메서드를 호출하지 않아도 using 구문을 탈출할 때 자동으로 Dispose 메서드를 호출하게 된다.
'C#' 카테고리의 다른 글
Apple Login Refresh Token 발급 샘플(C#) (0) | 2023.07.04 |
---|---|
스택 메모리와 힙 메모리 (0) | 2023.01.29 |
클래스 멤버의 접근 제한자(Access modifiers) (0) | 2023.01.14 |
전처리기 지시어 (0) | 2021.12.30 |
클래스 자료형 변환 (0) | 2021.12.28 |