프로그래밍 스티치

Object클래스 본문

JAVA/java.lang패키지와 유용한클래스

Object클래스

프로그래밍 스티치 2022. 2. 14. 22:34

 

Object클래스의 메서드

Object클래스는 모든 클래스의 최고 조상으로써, 11개의 메서드만을 가지고 있습니다.

 

norify(), wait()등은 쓰레드와 관련된 메서드이며, equals(), hashCode(), toString()은 적절히 오버라이딩 해야합니다.

 

많은 사람들이 equals()를 오버라이딩 하는 이유를 살펴보면

 

public boolean equals(Object obj) {
	return (this==obj)
}

위와 같이 equals()는 객체 자신과 주어진 객체(obj)를 비교합니다! 즉 Object클래스에 정의된 equals()는 참조변수 값(객체의 주소)을 비교합니다. 우리는 참조변수값을 비교할 때도 많지만 객체에 주어진 값, 즉 인스턴스변수의 값을 비교하는 경우가 많기 때문에 아래와 같이 오버라이딩합니다.

class Person {
	long id;
    
    public boolean equals (Object obj) {
    	if(obj!=null && obj instanceof Person) {
        	return id ==((Person)obj).id;
        } else {
        	return false;
		}
	}
    
    Person(long id) {
    	this.id = id;
	}
}
hashCode()

객체의 해시코드를 반환하는 메서드(해시함수)로써 다량의 데이터를 저장, 검색하는 해싱기법에 사용됩니다.

Object클래스의 hashCode()는 객체의 내부주소를 반환합니다!

 

equals()를 오버라이딩하면 hashCode()도 같이 오버라이딩 해야만 하는데요 그 이유는! 

equals()의 결과가  true인 두 객체의 hashcode는 같아야 하기 때문입니다.

 

해시코드를 오버라이딩한뒤에 객체의 내부주소를 알고싶을때는 

System.identityHashCode(Object obj)를 사용하면 됩니다!

 

toString()

객체의 정보를 문자열(String)로 제공할 목적으로 정의된 메서드로써 코드를 살펴보면

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

클래스의 이름을 반환한뒤 16진수로 해시코드를 반환한다. 이런 값은 주로 사용되지 않아서 보통 우리가 보기 편하게 오버라이딩을 많이 하는편이다.

 

getClass()

자신이 속한 클래스의 Class객체를 반환하는 메서드.

Class객체는 클래스의 모든 정보를 담고 있으며, 클래스당 단 1개만 존재합니다.

클래스파일이 메모리에 로드될때 생성됩니다.