개발공부/C#

[Effective C#] 아이템 46 : 리소스 정리를 위해 using과 try/finally를 활용하라

개발자 찐빵이 2021. 12. 21. 22:28
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() 메서드가 호출되도록 코드를 작성해야 한다.

반응형