방프리

20.04.22 Chapter2. .Net 리소스 관리 (Item 11) 본문

C#/Effective C#

20.04.22 Chapter2. .Net 리소스 관리 (Item 11)

방프리 2020. 4. 22. 21:50

Item 11: .NET 리소스 관리에 대한 이해

 

프로그래밍을 공부하면서 제일 이해하기 힘들고, 제일 찾기 힘든 버그는 당연코 메모리 관리라고 할 수 있다. 

C, C++에서는 하드웨어에 직접적으로 접근하는 대신 메모리 관리에 굉장히 엄격한데 C#은 GC를 통해서

이에 대한 부담을 조금 덜어준다. GC는 내부적으로 메모리를 관리해주면서 오랫동안 사용되지 않은 객체를 자동으로

해제하며, 사용되는 객체도 정돈을 하여 가용 메모리 공간을 좀 더 확장을 시킬 수도 있다. 

하지만 이 때문에 메모리 해제 부분의 규칙성을 침해받을 수도 있는지 C# 가이드 라인에서도 소멸자는 되도록이면

호출하지 않는 것이 좋다고 하는데 저자 또한 finalizer와 IDisposable 키워드를 통해 메모리를 수동으로 관리하되

사용 시 굉장히 주의해아 한다고 말한다.

C와 C++에서는 각각 free와 delete를 통해 개발자가 메모리 해제 시점을 정할 수 있지만 관리 또한 개발자의 책임으로

돌리기 때문에 관리가 여간 어려운 것이 아니다. C#은 이 책임을 자기가 지지만 개발자에게 자유를 뺐었다고 생각하면

쉬울 것 같다. 심지어 finalizer는 사용하더라도 호출시기가 불명확하고 성능 또한 떨어지므로 저자는 사용을 

굉장히 지향하고 있다. 대신 IDisposable 구현을 좀 더 추천하지만 C#에서는 메모리 관리는 GC에게 맡기는 편이

안전하다고 생각한다.

C++에서는 일반적인 코드지만 C#에서는 사용하지 않아야 한다.

 

Comments