티스토리 뷰

반응형

 

 

 

Object클래스와 equals(), hashCode(), toString() 메소드에 대해 간단하게 알아보자.

 

 

 

모든 클래스의 조상

Object는 java.lang패키지에 존재하는 클래스인데 import문 없이도 Object클래스를 사용할 수 있다.

모든 클래스들이 Object클래스를 자동으로 상속받기 때문이다.

그런 점에서 Object클래스는 모든 클래스의 조상이라고 할 수 있다.

 

그렇다면 다른 클래스를 extends로 상속받으면 다중상속이 되는것일까?

자바에서는 다중상속을 허용하지 않는다. 따라서 최상위의 부모클래스가 Object클래스를 상속받게 된다.

결국 어떠한 클래스라도 Object를 상속받게 되는 것이다.

 

이렇게 하면 다형성을 활용하는데 이점이 있으며,

모든 클래스가 공통으로 사용할 수 있는 메소드를 제공할 수 있다는 장점이 있다.

 

Object가 제공하는 메소드

오버로딩된 메소드를 포함하여 총 11개의 메소드를 제공한다. (참고)

그 중에서 자주 사용되는 equals(), hashCode(), toString() 3가지 메소드에 대해 알아 보겠다.

 

equals 메소드

equals메소드는 해당 객체와 전달받은 객체가 같은지 여부를 boolean Type으로 반환하는 메소드이다.

equals하면 '=='연산자와의 비교가 빠질 수 없다.

 

equals와 '=='연산자의 공통점과 차이점에 대해 간단하게 설명하자면 아래와 같다.

  • 공통점 : 비교한 값을 boolean Type으로 반환해 준다
  • 차이점 : equals()는 대상의 내용값(value)을 비교, '=='연산자는 대상의 주소값을 비교한다.

조금 더 설명을 덧붙이자면,

'==' 연산자의 경우 Primitive Type 또는 리터럴로 초기화한 String객체에서는 리터럴값을 비교하지만

Reference Type에서는 주소값을 비교한다.

<noMenu/>
int a = 1;
int b = 1;

Integer c = new Integer(1);
Integer d = new Integer(1);

if(a==b) System.out.println("True");
else System.out.println("False");

if(c==d) System.out.println("True");
else System.out.println("False");

if(c.equals(d)) System.out.println("True");
else System.out.println("False");

/* 출력결과
True
False
True
*/

 

 

 

hashCode 메소드 재정의

위에서 설명했듯이 어떤 두 객체가 같은지 비교할때 equals()메소드를 이용할 수 있다.

필요에 따라 equals 메소드를 재정의하여 사용할 수도 있는데

equals 메소드만 재정의하면 두 객체의 비교가 가능할것 같지만 그렇지 않다.

hashCode 메소드 또한 재정의 해야 한다. 그 이유가 무엇일까 ?

 

hasCode 메소드?

hashCode 메소드는 객체의 해시 코드값을 반환해주는 메소드이다.

hashCode 메소드는 기본적으로 객체마다 다른 값을 반환해 주기 때문에 객체를 식별하는데 쓰인다.

 

주로 HashSet, HashMap, HashTable과 같은 클래스에서 사용되는데

두 객체가 동등한지 판단할때 equals 메소드를 호출하기 전에 hashCode 메소드로 Hash값을 먼저 비교하기 때문에 논리적으로 동등한지 비교하려면 hashCode()메소드를 오버라이딩해야 한다.

 

따라서 eqauls 메소드와 hashCode메소드는 같이 재정의 해야 한다.

 

 

 

toString 메소드

해당 객체의 정보를 문자열로 반환해주는 메소드이다.

반환되는 문자열은 "클래스풀네임@해시코드" 인데 실제 반환되는 값은 아래와 같은 형태이다.

<noMenu/>
return getClass().getName() + '@' + Integer.toHexString(hashCode())

따라서, 대부분 toString메소드를 그대로 사용하지 않고 필요한 정보를 반환하도록 오버라이딩하여 사용한다.

 

 

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함