개발공부/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() 메서드가 호출되도록 코드를 작성해야 한다.

반응형