본문 바로가기
쿤즈 Dev/Java

[Java] Object 클래스의 toString(), hashCode() 메서드

by :)Koon 2023. 9. 12.

이번 포스팅은 약간 번외로 알고 가면 좋을 내용이다. 자바로 프로그래밍을 하다 보면 가끔씩 보이는 @Override 애노테이션이 있고 이 오버라이드 애노테이션이 붙은 메서드가 있다. 바로 'toString()', 'hashCode()' 메서드이다.

이번 포스팅에서는 이 메서드에 대해서 간단하게 알아보자.


Object 클래스의 오버라이드 메서드

자바에서는 'Object' 클래스가 있다. 이 클래스는 자바의 클래스 계층 구조에서 최상위에 위치하며, 모든 클래스가 이 클래스로부터 상속을 받는다. 따라서 'Object' 클래스의 메서드와 기능은 모든 자바 객체에서 사용할 수 있다.

 


'Object' 클래스는 다양한 메서드가 정의되어 있지만 가장 중요한 메서드는 아래와 같다.

 

eqauls(Object obj)

객체의 내용을 비교하여 두 객체가 동일한지 여부를 확인하는 메서드다. 이 메서드는 대부분의 클래스에서 오버라이딩되어 해당 클래스의 객체 비교 로직을 구현한다.

 

hashCode()

객체의 해시 코드를 반환하는 메서드다. 이 메서드는 객체를 해시 기반의 자료 구조에 저장하고 검색할 때 사용된다.

 

toString()

객체를 문자열로 표현하는 메서드다. 기본적으로 객체의 클래스 이름과 해시코드를 문자열로 반환하지만, 대부분의 클래스에서 이 메서드를 오버라이딩하여 더 유용한 문자열로 표현을 제공한다.

 

getClass()

객체의 클래스 정보를 반환하는 메서드다.

 

그 외

wait(), notify(), notifyAll() 과 같은 스레드 간의 동기화와 관련된 메서드가 있다.


toString(), hashCode() 에 대해서

이 두 메서드는 자바 객체의 핵심 메서드 중 두 가지이다. 각각을 조금 더 자세하게 알아보자.

 

toString()

이 메서드는 객체를 문자열로 표현하는 데 사용된다 이 메서드를 호출하면 해당 객체의 문자열로 표현이 반환된다.

 

기본적으로 'Object' 클래스의 'toString()' 메서드는 객체의 클래스 이름과 객체의 해시코드를 포함하는 문자열을 반환한다. 예를 들어서 다음과 같이 'Object' 클래스를 생성해 보자.

Object obj = new Object();
System.out.println(obj.toString());

'obj'라는 인스턴스를 만들고 이 인스턴스를 화면에 출력하는 메서들 이용해서 'toString()' 메서드를 호출하면 클래스 이름과 객체의 해시 코드를 출력하게 된다.

 

대부분의 클래스는 'toString()' 메서드를 재정의하여 해당 클래스의 객체를 더 유용하게 표현할 수 있도록 할 수 있다. 예를 들어, 문자열 클래스에서는 'toString()' 메서드가 문자열의 내용을 반환한다.

 

hashCode()

이 메서드는 객체의 해시 코드를 반환한다. 해시 코드는 정수 값이며, 객체의 내부 데이터에 기반하여 생성된다.

 

해시 코드는 객체가 해시 테이블과 같은 자료 구조에서 사용될 때 유용하다. 이 해시 테이블에서 객체를 저장하고 검색할 때 해시 코드를 사용하여 빠른 액세스를 가능하게 한다.

 

'hashCode()' 메서드를 사용할 때는 두 가지 주요 규칙을 따라야 한다. 첫 째는 동일한 객체에 대해 여러 번 호출해도 항상 같은 해시 코드를 반환해야 한다. 그리고 둘 째는 서로 다른 객체라면 다른 해시코드를 반환해야 한다. 그러나 다른 객체라고 해도 해시 코드가 다르지 않을 수 있으므로 해시 코드가 다르다면 두 객체가 확실시 다르다는 보장은 없다.


이번 포스팅에서는 조금 특별하지만 가장 평번하다고 할 수 있는 'Object' 클래스에 대해서 알아보고 내부의 두 메서드에 대해서 알아보았다. 자주 사용하지 않을 수 있지만 필요시 사용하게 되니 알아두면 도움이 된다.

댓글