C# 클래스 종료자

권태형·2024년 1월 25일
0

C#

목록 보기
7/7

일반적으로 클래스를 생성할때 생성자인 new키워드를 사용하여 생성한다. 클래스 또한 생성한 이후 객체와 같이 참조형식이기 때문에 GT(가비지 콜렉터)가 메모리에서 지우기는 하는데 완전한 프로그램 종료 때 말고 언제 지우는지는 GT만이 알 일이다.

이러한 상황에서 종료자 키워드 ~ClassName()을 이용하여 GT가 해당 클래스를 종료하는 시점을 확인할 수 있다.

각 컴퓨터의 성능마다 언제 종료할지는 알 수 없지만, 종료에 맞춰서(클래스의 삭제 바로 직후) 특정한 메소드를 사용하고 싶거나 원하는 동작이 있다면 사용할 수 있다.

주의할 점은 종료자의 호출은 개발자가 원하는 타이밍 즉, 코드가 작성되어 호출되는 순간에 동작하는게 아니라, GT가 메모리상에 돌아다니면서 키워드를 적어둔 클래스를 종료시킬 때 호출된다.

주체가 GT가 되기 때문에 종료자에 맞춰 코드를 작성하면 수동적으로 코드를 작성하게 된다.

사용하게 된다면, 클래스의 종료시점이후 빠르게 동작시켜야 할 메소드가 있다면 사용할 수 있다.

public class MyClass : IDisposable
{
    // 관리되지 않는 리소스
    private IntPtr handle;

    // 종료자
    ~MyClass()
    {
        Dispose(false);
    }

    // IDisposable 인터페이스 구현
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            // 관리되는 리소스 해제
        }

        // 비관리 리소스 해제
        // ...

        // 종료자에서 호출되는 공통 정리 작업
    }
}

이 코드에서는 종료자를 사용하여 비관리 리소스를 해제하고, IDisposable 인터페이스를 구현하여 개발자가 명시적으로 Dispose를 호출할 수 있도록 할 수 있다. 개발자가 명시적으로 Dispose를 호출하면 관리되는 리소스를 더 빠르게 해제할 수 있다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글