[이펙티브 자바] 아이템 8 - finalizer와 cleaner 사용을 피하라

enjoy89·2024년 10월 11일
0
post-custom-banner

Java에서 finalizercleaner는 객체가 더 이상 사용되지 않을 때 자원을 정리하는 방법과 관련된 개념이다.

  • finalizer와 cleaner는 GC가 객체를 수집하기 전에 실행되지만, 성능에 부정적인 영향을 줄 수 있다.
  • finalizer와 예측 불가능하게 실행되고 성능 저하의 원인이 될 수 있기 때문에 가급적 사용을 피해야 한다.
  • 대신에 AutoCloseable과 try-with-resources를 사용해 명시적으로 자원을 해제하는 방식이 더 효율적이고 안전하다.

AutoCloseable 인터페이스

  • AutoCloseable은 자원을 명시적으로 해제할 수 있도록 하는 인터페이스이다. 이를 구현하면 close() 메서드를 제공하여 자원 해제를 처리할 수 있다.
  • try-with-resources 문법을 사용하면 자원을 사용한 후 자동으로 close() 메서드가 호출되어 자원을 해제한다. 이 방식은 가비지 컬렉션과 무관하게 즉각적으로 자원을 정리하므로 성능이 우수하다.
  • 닫힘 상태 추적: 자원을 포함한 객체 내에 boolean 필드를 추가하여 객체가 닫혔는지를 추적할 수 있다. close() 메서드에서 이 필드를 true로 설정하고, 다른 메서드에서는 이 필드를 검사하여 객체가 닫힌 상태에서 호출되면 IllegalStateException을 던지도록 한다.

결론

  • finalizercleaner는 성능 저하와 예측 불가능성 문제로 인해 현대 Java 프로그래밍에서는 거의 사용되지 않으며, 대신 AutoCloseabletry-with-resources를 활용한 명시적인 자원 관리가 권장됨
  • 이러한 접근 방식은 자원의 안전한 해제를 보장하고, 코드의 가독성과 유지보수성을 향상시킨다.
profile
Backend Developer 💻 😺
post-custom-banner

0개의 댓글