1.1 Object 클래스
- 클래스의 상속을 학습할 때, Object 클래스에 대해서 이미 배웠지만,
여기서는 보다 자세히 알아보자.
Object 클래스는 모든 클래스의 최고 조상이기 때문에 Object 클래스의 멤버들은
모든 클래스에서 바로 사용 가능하다.
- Object 클래스는 멤버변수는 없고 오직 11개의 메서드만 가지고 있다.
이 메서드들은 모든 인스턴스가 가져야 할 기본적인 것들이며,
우선 이 중에서 중요한 몇 가지만 살펴보자.
(1) equals(Object obj)
- 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean 값으로 알려주는 역할을 한다.
아래의 코드는 Object 클래스에 정의되어 있는 equals 메서드의 실제 내용이다.
public boolean equals(Object obj){
return (this==obj);
}
- 위의 코드에서 알 수 있듯이 두 객체의 같고 다름을 참조변수의 값으로 판단한다.
그렇기 때문에 서로 다른 두 객체를 equals 메서드로 비교하면 항상 false를 결과로 얻게 된다.
(2) hashCode()
- 이 메서드는 해싱(hashing) 기법에 사용되는 '해시함수(hash function)'를 구현한 것이다.
해싱은 데이터 관리 기법 중의 하나인데, 다량의 데이터를 저장하고 검색하는 데 유용하다.
해시함수는 찾고자하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드(hashcode)를 반환한다.
- 일반적으로 해시코드가 같은 두 객체가 존재하는 것이 가능하지만,
Object 클래스에 정의된 hashCode 메서드는 객체의 주소값으로 해시코드를 만들어 반환하기 때문에
32 bit JVM에서는 서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없었지만,
64 bit JVM에서는 8 byte 주소값으로 해시코드(4 byte)를 만들기 때문에 해시코드가 중복될 수 있다.
- 앞서 살펴본 것과 같이 클래스의 인스턴스변수 값으로 객체의 같고 다름을 판단해야 하는 경우라면,
equals 메서드 뿐만 아니라 hashCode 메서드도 적절히 오버라이딩해야 한다.
같은 객체라면 hashCode 메서드를 호출했을 때의 결과값인 해시코드도 같아야 하기 때문이다.
'자바의 정석' 카테고리의 다른 글
[자바의 정석 2권] wait()와 notify() (0) | 2024.12.30 |
---|---|
[자바의 정석 2권] Lock과 Condition을 이용한 동기화 (0) | 2024.12.30 |
[자바의 정석 2권] volatile (0) | 2024.12.30 |
[자바의 정석 2권] TreeSet (0) | 2024.12.24 |
[자바의 정석 2권] HashSet (0) | 2024.12.24 |