hong's android

[Java] java.lang.Object 본문

Develop/Java

[Java] java.lang.Object

_hong 2023. 2. 11. 14:43

java.lang.Object란

 

java.lang 패키지에는 프로그래밍을 위한 다양한 클래스들이 모여있고 이를 활용 할 수 있다.

(다른 패키지와 다르게 import 구문 없이 사용 가능하다.)

 

그중에서 object는 클래스들의 가장 상위 클래스이고 프로그래밍을 위한 다양한 메소드들을 제공한다.

 

1. equals()

동일한 객체인지 판단한다. 기본적으로 == 연산자를 통해 객체의 동등함을 판단하는데 이때 객체의 주소값을 갖고 판단한다. 그렇기에 두 객체의 내용이 같다는것을 판단하기위해선 따로 equasl() 메소드를 오버라이드해서 사용해야한다. 

(Collection 프레임워크 몇몇 클래스는 객체의 동등성을 판단하기위해서 객체의 hashcode() -> equals() 메소드를 통해 확인하기 때문에 위 프레임워크를 가용하는경우 hashcode(),equals()를 함께 오버라이드 해서 사용해야한다.)

 

2.hashcode()

메모리 번지를 이용해서 해시값을 반환해준다.

 

3.toString() 

객체의 정보를 문자열로 반환해준다. @왼쪽에 클래스 이름, 오른쪽에 해시코드 값을 보여준다.

 

내부적으로 getClass() 메소드와 hashCode() 메소드를 호출하는것을 확인 할 수 있다.

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

 

예) object.Book@16f65612

 

 

4.finalize()

특정 객체가 참조관계가 더이상 없을때 가비지 컬렉터가 객체를 회수할때 해당 메소드를 호출한다.

예측이 불가능하고, 수행을 보장하지 않는다. 그렇기에 finalize 메소드에 리소스들을 해제하는 코드들을

작성하는건 위험하다.

 

단점 : finalize()를 오버라이드해서 재정의 하는경우 성능이 저하된다.

하지만 반드시 해제해야하는 리소스를 해제하지 못한경우 최종 방어수단이 될 수 있다.

 

5.getClass()

아래와 같이 메소드는 Class 클래스를 반환해준다.

 

public final native Class<?> getClass();

 

5.notify, wait 

 

 

 

 

Reference.

https://codechacha.com/ko/java-hashcode/