java의 final, finally, fianlize는 전혀 다른 개념이지만 이름 때문에 혼동이 발생할 수 있다.
JAVA final 키워드
final 키워드는 클래스, 메서드, 변수를 선언할 때 사용하여 각각의 상태를 일관되게 유지할 수 있는 속성을 부여한다.
finally 키워드는 try-catch
문에 사용되어 try block이 종료될 때 항상 실행되는 code block을 만든다.
try {
System.out.println("try block");
throw new Exception();
} catch (Exception e) {
System.out.println("catch block");
} finally {
System.out.println("finally block");
}
>>> 출력 결과 :
try block
catch block
finally block
finalize()는 Object
클래스에 선언된 protected 메소드로 모든 객체가 사용이 가능하다. Garbage Collector가 어떤 객체를 참조하는 객체가 없다고 생각되면, 객체를 소멸시킬 때 finalize() 메소드를 호출한다.
클래스를 정의할 때 finalize()를 재정의 하여 특정 자원을 함께 소멸해주도록 구현할 수도 있다. 하지만 메소드 호출 시점이 Garbage Collector에 의존적이기 때문에 생각했던 순서로 동작하지 않을 가능성이 크므로 재정의 하지 않는 것이 좋다.