Finalize 메서드 재정의
Finalize 메서드는 Dispose 메서드가 호출되지 않은 경우에 리소스를 정리하는 보호 기능으로 사용됩니다. 이 메서드는 관리되지 않는 리소스를 정리할 때만 사용해야 합니다. 관리되는 리소스는 가비지 수집기가 자동으로 정리하기 때문에, 관리되는 개체에 대해서는 Finalize 메서드를 구현할 필요가 없습니다. 기본적으로 Object.Finalize 메서드는 아무것도 수행하지 않습니다. 가비지 수집기가 개체에 대한 정리 작업을 수행한 후에 해당 개체의 메모리를 회수하도록 하려면 클래스의 이 메서드를 재정의해야 합니다.
참고 |
---|
C# 또는 C++ 프로그래밍 언어에서는 Finalize 메서드를 재정의할 수 없습니다.C#에서는 소멸자 구문을 사용하여 Finalize 메서드를 구현합니다..NET Framework 버전 2.0에서는 Destructors and Finalizers in Visual C++에 설명된 대로 Finalize 메서드 구현을 위한 자체 구문이 C++에 제공됩니다.이전 버전에서는 C++에서 C#과 마찬가지로 Finalize 메서드에 소멸자 구문을 사용했습니다. |
Object.Finalize 메서드를 보호되는 메서드로 지정해야 하며 이 제한적인 범위는 클래스에서 메서드를 재정의할 때도 유지되어야 합니다. Finalize 메서드를 보호하면 응용 프로그램 사용자가 개체의 Finalize 메서드를 직접 호출하는 것을 방지할 수 있습니다.
개체의 Finalize 메서드는 개체에서 사용하는 모든 리소스를 해제하고 개체의 기본 클래스에 대해서도 Finalize 메서드를 호출해야 합니다. 개체의 Finalize 메서드는 해당 기본 클래스의 개체 이외의 개체에 대해서는 메서드를 호출하면 안 됩니다. 그 이유는, 공용 언어 런타임 종료의 경우와 같이, 호출되는 다른 개체와 호출하는 개체가 동시에 수집될 수도 있기 때문입니다.
Finalize 메서드를 벗어나는 예외를 허용한 경우 시스템에서는 메서드가 반환된 것으로 간주하고 계속하여 다른 개체의 Finalize 메서드를 호출합니다