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 { } 로 정의되어 있다. 하지만 다음과 같이 몇가지 문제가 있다. 따라서 사용하지 않는 것이 권장된다.
-
언제 실행될지 알 수 없다. 실행을 보장X
-
성능 저하
-
예외 발생 시 무시
- 보통 예외가 발생하면 stack trace 가 출력되지만, finalize 내에선 무시되고 처리한다.