C#에서 자원을 효율적으로 해제하는 것은 메모리 누수 방지와 애플리케이션 안정성에 매우 중요합니다. 이 글에서는 Dispose 패턴과 의존성 해제 방법을 간략하게 설명합니다.
1. Dispose 패턴 이해하기
Dispose 패턴은 관리되지 않는 리소스(파일 핸들, 네트워크 소켓 등)를 명시적으로 해제하기 위해 IDisposable 인터페이스를 구현하고 Dispose 메서드를 제공하는 기법입니다.
2. IDisposable 인터페이스 구현 예제
public class ResourceHolder : IDisposable
{
private bool disposed = false;
// 예: 관리되지 않는 리소스 핸들
private IntPtr unmanagedResource;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this); // 최종자 소멸 방지
}
protected virtual void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
// 관리 리소스 해제
}
// 관리되지 않는 리소스 해제
if (unmanagedResource != IntPtr.Zero)
{
// 자원 해제 코드
unmanagedResource = IntPtr.Zero;
}
disposed = true;
}
~ResourceHolder()
{
Dispose(false);
}
}
3. 종속성 해제(Dependency Injection과 연계)
DI 컨테이너를 사용할 때도 IDisposable 구현 클래스는 반드시 Dispose 되어야 합니다. 대부분 컨테이너에서는 등록 수명주기에 따라 자동 Dispose를 지원합니다.
직접 관리하는 인스턴스라면, using문으로 감싸거나 수동으로 Dispose 호출을 잊지 말아야 합니다.
4. 요약
Dispose 패턴은 안정적인 리소스 관리를 위한 필수 기법입니다. 관리되는 리소스뿐만 아니라 관리되지 않는 리소스도 적절히 해제해야 메모리 누수를 방지할 수 있습니다. DI 환경에서는 컨테이너의 Dispose 관리 기능을 활용하는 것이 좋습니다.
'C#' 카테고리의 다른 글
| C# 커스텀 예외(Custom Exception) 설계 (0) | 2026.04.23 |
|---|---|
| C# 중첩 클래스(Nested Class) 활용 사례 (1) | 2026.04.23 |
| C# 고정 크기 버퍼(fixed size buffer) 사용 (0) | 2026.04.22 |
| C# BenchmarkDotNet으로 성능 측정하기 (0) | 2026.04.22 |
| C# BackgroundWorker로 백그라운드 작업 처리 (0) | 2026.04.22 |