YUYANE

Java/ Object 클래스와 메서드(toString(), equals(),hashCode()) 본문

Programming Languages/JAVA

Java/ Object 클래스와 메서드(toString(), equals(),hashCode())

YUYA 2020. 12. 23. 20:27

Object클래스와 메서드

 - 일반화의 끝판왕

 - java의 클래스는 모두 Object로부터 상속받음

 - 따라서 Object에 있는 메서드들은 어떤 클래스에서도 오버라이딩 가능

 

1) toString() 메서드

 

- 사람이 읽기 편하게 해당 개체를 문자열로 표현

- print 할 떄 내부적으로 toString()을 호출하여 어떤 개체든 그것을 문자열로 표현한 모습을 출력 할 수 있다 

- 자바 공식 문서는 모든 클래스에서 이 메서드를 오버라이딩하라 권장(근데 사실 잘 안함..)

 

2) equals()메서드

 

- 문자열의 동치 비교할 때 이미 본 메서드

- Object 클래스 안의 기본 구현

   - 단순한 주소 비교 : this == obj

   - 실제 개체 속의 데이터를 일일이 비교하지 않음

   - 문자열의 경우에는 두 문자열이 같은지 문자열 하나하나 확인해줘야 하기 때문에 string 클래스에서 equals() 메서드를 오버라이딩 해버린 것.

   - 각 클래스마다 같다는 의미가 다를 수 있음. 클래스 속 데이터를 비교해야 한다면 오버라이딩 필요

     - String 클래스도 오버라이딩했음

     - 이때 hashCode()도 반드시 같이 오버라이딩해야 함

Person person0 = new Person("Pope","Kim");
Person person1 = new Person("Pope","Kim");
Person person2 = person0;

System.out.println(person0.equals(person1)); //false
System.out.println(person0.equals(person2)); //true

   

3) hashCode() 메서드

 

- 어떤 개체를 대표하는 해시값을 32비트 정수로 반환

  - 동치인 두 개체는 해시값이 같음

  - 동치가 아닌 두 개체도 해시값이 같을 수 있음 (해시 충돌)

 

    두 데이터가 같으면 해시값이 같다

    두 데이터가 다르면 해시값이 같을수도/다를수도 있다

 

- Object 클래스 안의 기본 구현

   - 개체의 주소를 int로 반환

- 주목적 : Java가 자체 제공하는 HashMap 클래스에서 사용하기 위함

   - 키(key)로 사용하는 개체의 해시값이 필요

   - 뜻밖의 이득?

      - 빠른 비교용으로 사용 가능(클래스가 메서드를 제대로 구현했을 경우에만)

      - 단, 두 개체가 같지 않음만 빠르게 판단 가능(해쉬코드가 같아도 두 개체는 다를 수 있으니깐)

 

'Programming Languages > JAVA' 카테고리의 다른 글

Java/ Exception  (0) 2021.01.05
Java/ 추상 메서드, 클래스  (0) 2020.12.28
Java/ final  (0) 2020.12.22
Java/ 다형성(polymorphism)  (0) 2020.12.22
Java/ 상속 vs 컴포지션  (0) 2020.12.16
Comments