개발일지

최상위 클래스 Object 본문

Java/Java 개념 설명

최상위 클래스 Object

딸기아사이레모네이드리프레셔 2024. 2. 21. 17:02
728x90

자바의 모든 클래스는 Objcet 클래스를 상속받는다. 

아무런 클래스로 상속하지 않으면 자동으로 extends Object를 삽입해 Object 클래스를 상속한다. 

💡Object 클래스의 주요 메서드


반환타입 메서드명 주요 내용
String toString() - Object 객체의 정보를 문자열로 출력
- 일반적으로 오버라이딩해서 사용
- 출력 결과 : 패키지.클래스명@해시코드
boolean equals(Object obj) - 입력매개변수 obj 객체와 stack 메모리값(번지)비교
- 등가 비교 연산자 == 와 동일한 결과
int hashCode() - 객체의 hashCode() 값 리턴
- Hashtable, HashMap 등의 동등 비교에 사용
- 위치값을 기반으로 생성된 고유값

1️⃣ toString() - 객체 정보를 문자열로 출력

  • 객체 정보는 패키지명.클래스명@해시코드 로 나타난다.
  • 해시코드는 객체가 저장된 위치와 관련된 값이다. 
  • 실제 객체의 정보를 표현하고자 할때는 대부분 클래스명이나 숫자로 나열된 해시코드보다는 객체에 포함돼 있는 필드값을 출력한다. 따라서 이때 자식 클래스에서는 toString() 메서드를 오버라이딩해 사용한다. 
class A {
	int a = 3;
	int b = 4;
}

A aa = new A();
System.out.printf("%x\n",aa.hashCode()); // 7@dea4e3
System.out.println(aa);                  // 패키지.클래스명@해시코드
class B {
	int a = 3;
	int b = 4;
    
    @Override
    public String toString() {
    	return "필드값 : a = " + a + " , b = " + b;
    
    }
}


B bb = new B();
System.out.println(bb);                  // 필드값 : a = 3, b = 4

2️⃣ equals(Object obj) - 스택 메모리의 값 비교

equals(Object obj)는 입력매개변수로 넘어온 객체와 자기 객체의 스택 메모리 변수값을 비교해 그 결과를 true 또는 false로 리턴하는 메서드다. 기본 자료형이 아닌 객체의 스택 메모리 값을 비교하므로 실제데이터의 값이 아닌, 실제 데이터의 위치를 비교하는 것이다. 

✅ 실제 내용을 비교하고자 할때는 ==으로 비교하는 것이 아니라, equals() 메서드를 오버라이딩해 사용해야 한다. 

class Example {
    String name;

    public Example(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "필드값 : a = " + name;

    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Example) {
            if (this.name == ((Example) obj).name) {
                return true;
            }
        }
        return false;
    }
}

public class Practice {
    public static void main(String[] args) {
        Example ex = new Example("Hello");
        Example ex2 = new Example("Hello");

        System.out.println(ex == ex2);      //false
        System.out.println(ex.equals(ex2)); //true
    }
}

3️⃣ hashCode() - 객체의 위치와 연관된 값

  • hashCode() 메서드는 객체의 위치와 관련된 값으로, 실제 위치를 나타내는 값은 아니다.
  • 객체의 위치값을 기준으로 생성된 고유값 정도로 생각하는 것이 적절하다.
  • 두 객체의 내용을 비교하기 위해 equals() 메서드를 오버라이딩해 봤다. 그런데 Hashtable, HashMap 등에서 동등 비교를 하고자 할 때는 hashCode()까지 오버라이딩 해야한다.
  • HashMap 자료구조는 테이블을 (Key,Value)의 쌍으로 저장하며, Key값은 중복되지 않는다. 따라서 Key값이 서로 같은지를 확인해야 하는데, 이 과정은 다음과 같이 2단계로 구성된다.
    • 1. 두 객체의 hashColde() 값을 비교한다.
    • 2. 두 객체의 hashCode() 값이 동일 할 때 equals() 메서드를 호출하며, 이 값이 true이면 같은 객체로 인식한다. 
    • 정리하자면, HashMap 관점에서 두 객체가 동일하기 위해서는 hashCode()값이 동일해야 하고, equals() 메서드가 true를 리턴해야 한다.
728x90

'Java > Java 개념 설명' 카테고리의 다른 글

Static 제어자  (0) 2024.02.20
필드, 메서드, 생성자  (0) 2024.02.20
클래스와 객체의 개념  (0) 2024.02.20
기본 자료형 VS 참조 자료형  (0) 2024.02.20
JVM에 대해 알아보자  (0) 2023.04.10
Comments