Java
Object클래스의 finalize() 메소드의 사용예제
bang2001
2013. 7. 25. 16:48
class FinalizeTest
{
@Override
public void finalize() throws Throwable
{
System.out.println("finalize() 메소드 호출됨");
}
public static void main(String[] args)
{
FinalizeTest ins = new FinalizeTest();
try
{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
}
ins = null;
System.gc();
System.out.println("제일 마지막 코드! 마지막 출력문이다.");
}
}//////////////////////////////
------------------------------------------------------------------------------------------
finalize() 메소드는 가비지 컬렉터가 객체를 소멸시키기 전에 호출이 되어집니다. 현재 위의 코드를 보게되면
finalize() 메소드는 main()메소드에서 호출이 되어있지 않습니다. 하지만 결과물을 보게 되면 finalize()
호출 된 것을 볼 수 있습니다. 그것은 위에서도 설명했다 싶이 finalize() 메소드가 객체를 소멸시키기 전
즉 가비지 컬렉터가 수행하기 바로 직전에 출력된 것을 볼 수 있습니다. 그리고 나서 마지막 문자열을 출력된 것을 볼 수
있습니다. (3초간 스레드가 대기상태에 있도록 구현하였습니다. 가비지컬렉터가 수행되고 난 이후라는점을 강조하였습니다.)
그리고 가비지 컬렉터가 수행하게 되는 이유는 ins 참조변수에 null값을 넣어서 FinalizeTest객체를
가비지 컬렉터의 대상이 되도록 하였습니다.
이 상태에서 System.gc(); 메소드를 사용하여 가비지 컬렉터가 수행(run)이 되도록 한 것입니다.
위와같은 사실로 finalize() 메소드가 언제 호출되는지 알 수 있습니다.
또한 finalize() 메소드의 사용용도는 객체가 소멸되기 바로 직전에 어떤 처리해야 할
코드가 있을때 사용되어집니다.