221026 - Object 클래스와 finalize() 문제

Jongleee·2022년 10월 26일
1

TIL

목록 보기
88/576

Object 클래스와 finalize() 문제

1. Object 클래스

  • java의 모든 클래스의 최상위 부모이다.
  • 자동으로 java.lang.Object 클래스를 상속받으므로 extends 역시 필요 없다.
  • 모든 class는 object class의 메서드를 사용할 수 있고, 일부를 overriding 할 수 있음

2. 주요 메소드

  • instanceof 연산자와 getClass()
    instanceof 연산자는 상위 부모클래스에도 true가 된다. if문으로 분기처리할 경우 getClass()로 정확히 처리하는 것이 낫다.

3. finalize() 의 문제

finalize() 는 GC가 발생하여 현재 객체가 사라지기 전에 호출되는 메소드이다. protected void finalize() throws Throwable { } 로 정의되어 있다. 하지만 다음과 같이 몇가지 문제가 있다. 따라서 사용하지 않는 것이 권장된다.

  1. 언제 실행될지 알 수 없다. 실행을 보장X

    • 자바 스펙에 실행 시점을 명확히 하지 않음.

    • 인스턴스가 finalization 큐에 들어간 후 언제 실행될 지 알 수 없다.

  2. 성능 저하

  3. 예외 발생 시 무시

    • 보통 예외가 발생하면 stack trace 가 출력되지만, finalize 내에선 무시되고 처리한다.

0개의 댓글