728x90
리소스 정리
시스템 리소스를 사용하는 타입은 IDisposable 인터페이스가 제공하는 Dispose() 메서드를 이용해서 명시적으로 리소스를 해제해야 한다.
사용자 입장에서 Dispose() 메서드가 항상 호출되도록 코드를 작성하기 위한 최선의 방법은 using문이나 try/finally 블록을 활용하는 것이다.
Dispose()를 보장하는 방법
Dispose()를 호출해야 하는 경우, using문을 사용하는 것이 가장 간단하다.
C# 컴파일러는 using문을 발견하면 해당 객체를 감싸는 try/finally 블록을 자동으로 생성해준다.
Close()와 Dispose()의 차이점
Dispose()
리소스를 해제하는 작업 외에 GC.SuppressFinalize()를 호출해서 가비지 수집기에게 객체에 대한 finalizer를 호출할 필요가 없음을 알린다.
Close()
위 작업을 하지 않기 때문에 finalizer를 호출할 필요가 없어도 finalizer 큐에 해당 객체가 남는다.
결론
IDisposable을 구현한 타입을 사용할 때는 반드시 Dispose() 메서드를 호출해야 한다.
이때 using문이나 try/finally 블록을 이용할 수 있다.
어떤 경우라도 올바르게 Dispose() 메서드가 호출되도록 코드를 작성해야 한다.
반응형
'개발공부 > C#' 카테고리의 다른 글
동기 비동기, 블럭 넌블럭 (0) | 2022.01.10 |
---|---|
[Effective C#] 아이템 47 : 사용자 지정 예외 클래스를 완벽하게 작성하라 (0) | 2021.12.22 |
[Effective C#] 아이템 45 : 메서드가 실패했음을 알리기 위해서 예외를 이용하라 (0) | 2021.12.20 |
[Effective C#] 아이템 43: 쿼리 결과의 의미를 명확히 강제하고, Single()과 First()를 사용해라 (0) | 2021.12.18 |
[Effective C#] 아이템 42 : IEnumerable<T> 데이터 소스와 IQueryable<T> 데이터 소스를 구분하라 (0) | 2021.12.17 |