최상위 객체 Object 클래스(주요 메소드, finalize 이슈)

2021. 3. 21. 01:56 JAVA/Java

1. Object 클래스

java의 모든 클래스의 최상위 부모이다. 자동으로 java.lang.Object 클래스를 상속받으므로 extends 역시 필요 없다.

2. 주요 메소드

반환형메소드명설명

boolean equals(Object o) 객체 간에 동일여부를 나타냄
int hashCode() 객체의 해쉬값
String toString() 객체를 string으로 나타냄, 기본적으로 클래스명@16진수hashCode값
Object clone() 객체를 복사해서 리턴
void finalize() 객체가 GC처리 되기전에 호출
Class getClass() 객체의 runtime class를 리턴
  • instanceof 연산자와 getClass() : instanceof 연산자는 상위 부모클래스에도 true가 된다. if문으로 분기처리할 경우 getClass()로 정확히 처리하는 것이 낫다.

3. finalize() 의 문제

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

  1. 언제 실행될지 알 수 없다. 실행을 보장X
    • 자바 스펙에 실행 시점을 명확히 하지 않음.
    • 인스턴스가 finalization 큐에 들어간 후 언제 실행될 지 알 수 없다.
  2. 성능 저하
  3. 예외 발생 시 무시
    • 보통 예외가 발생하면 stack trace 가 출력되지만, finalize 내에선 무시되고 처리한다.



출처: https://sjh836.tistory.com/144?category=679845 [빨간색코딩]