자바의 소멸자에 대해서 (finalize, cleaner)

코딩하는범이·2021년 11월 15일
0

자바를 몇년동안 쓰면서도... 내부적으로 일어나는 소멸자에 대해서 잘 알지 못했다.

그래서 Effective Java를 읽으면서 어느 정도 해답을 찾았다.

일단 자바는 가비지 컬렉터(Garbage Collector, GC)에 의해 메모리에서 제거될때 finalize() 메서드를 호출한다.

그래서 간단히 우리는 finalize 메서드를 오버라이드 해서 사용하자는 생각이 있을지 모르겠지만, 잘못된 생각이였다.

실제로 java9+ 부터 Deprecated 되어버렸으며 그 대안으로 Cleaner를 소개하지만, 이것 또한 사용을 권장하지 않는다. 결과부터 말하자면 두개다 위험하고 예측할 수 없고, 느리고 불필요 하다는 것이다.

다만 비메모리 자원을 해제 해야 하는 상황은 분명히 있을 수있다. 그럴때에는 try-with-resources와 try-finally를 사용해 해결한다고 적혀있다.

자바에서는 스스로 객체를 회수 하는 작업은 개발자가 하지 않고 가비지 컬렉터에게 맡기는 것이 안전하겠다.

profile
기록 그리고 기억

0개의 댓글