[Java] Object 클래스(Object Class)

u_yonu·2026년 2월 5일

Java

목록 보기
13/18
post-thumbnail

Object 클래스

  • 자바의 가장 최상위 클래스로 모든 클래스의 조상
  • 모든 클래스는 직접적으로나 간접적으로 Object를 상속 받음
  • Object의 멤버는 모든 클래스의 멤버

toString() 메서드

  • 객체를 문자열로 변경하는 메서드를 말함

상세코드

public String toString(){
	return getClass().getName() + "@" + Integer.toHexString(hashCode());
  
}
- getClass()

	* 현재 객체의 실제 클래스 정보를 반환
	* 다형성 상황에서도 정확한 클래스가 나옴

- getName()

	* 클래스의 전체 경로 포함 이름 반환

		예: com.example.Student
        
- "@" : 구분자
- hashCode()
  * 객체의 고유한 정수값(int)
  * 기본 구현에서는 보통 객체의 메모리 주소 기반
  
 - Integer.toHexString(hashCode())
  * 메모리 주소 표현 방식이랑 친숙
  * 길이가 짧고 개발자들이 보기 편함

위의 코드의 결과는

com.example.Student@3f99bd52
이런 식으로 나오게 된다.

이건 쉽게 말해서, " 나는 com.example.Student 클래스에서 만들어진 객체이고, 이 해시값을 가진 인스턴스야" 라는 뜻을 가진다.

여기서 나타나는 이 문장이 실제 중요한 의미를 가지기는 어렵다.
따라서 우리는 이걸 Overriding을 해서 우리가 넣고 싶은 의미를 알 수 있게 만든다.

@Override
public String toString() {
    return "Student{name='" + name + "', age=" + age + "}";
}

equals() 메서드

  • 두 객체가 동일한지 비교하는 메서드
public boolean equals(Object obj){
	return (this == obj);
}

기본 equals() 메서드는 두 객체의 참조값(메모리 주소) 이 동일한지를 비교하므로,
동작 자체는 == 연산자와 동일하다.

하지만 String과 같은 일부 클래스는 equals() 메서드를 오버라이딩하여 객체의 값(value) 을 비교하도록 구현되어 있다.
이 때문에 같은 문자열 값을 가지는 서로 다른 객체라도 equals()는 true를 반환할 수 있다.

따라서 일반적으로 다음과 같이 이해할 수 있다.

== → 같은 객체인가? (주소 비교)

equals() → 논리적으로 같은 값인가? (내용 비교)

단, 사용자 정의 클래스에서는 equals()를 오버라이딩하지 않으면
equals() 역시 주소 비교를 수행한다.

hashCode() 메서드

  • HashSet, HashMap 등에서 객체의 동일성을 확인하기 위해 사용
  • equals 메서드를 재정의 할 때는 반드스 hashCode()

cf) hashcode : 객체를 식별하는 정수형 값
- 객체를 빠르게 검색하거나 비교할 때 사용
- 기본적으로 메모리 주소 기반으로 생성하지만 재정의 가능

getClass() 메서드

: 객체의 런타임 클래스 정보를 반환

public class Main{
public static void main(String[] args){
	String str = "Hello";
    System.out.println(str.getClass()); // class java.lang.String 
}
}

기타 메서드

  • clone()
  • finalize()
  • wait() / notify()
    등등
profile
비전공자의 개발도전기

0개의 댓글