[TIL] 20250101 자바 Object

Drumj·2025년 1월 1일
0

2025 TIL

목록 보기
1/11

Object 클래스가 최상위 부모 클래스인 이유

모든 클래스가 Object 클래스를 상속 받는 이유는 다음과 같다.

  • 공통 기능 제공
  • 다형성의 기본 구현

공통 기능 제공

모든 객체에 필요한 공통 기능을 제공한다. Object는 최상위 부모 클래스이기 때문에 모든 객체는 공통 기능을 편리하게 제공(상속) 받을 수 있다.

Object가 제공하는 기능

  • toString() : 객체의 정보 제공
  • equals() : 객체의 같음을 비교
  • getClass() : 객체의 클래스 정보를 제공
  • 기타 등등

다형성의 기본 구현

Object 클래스는 다형성을 지원하는 기본적인 메커니즘을 제공한다. 모든 자바 객체는 Object 타입으로 처리될 수 있으며, 이는 다양한 타입의 객체를 통합적으로 처리할 수 있게 해준다.


Object를 활용한 다형성의 한계

Object는 모든 객체를 대상으로 다형적 참조를 할 수 있다.

  • 쉽게 이야기 해서 Object는 모든 객체의 부모이므로 모든 객체를 담을 수 있다.

Object를 통해 전달 받은 객체를 호출하려면 각 객체에 맞는 다운캐스팅 과정이 필요하다

  • Object가 세상의 모든 메서드를 알고 있는 것이 아니다.

toString()

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

Object가 제공하는 toString() 메서드는 기본적으로 패키지를 포함한 객체의 이름과 참조값(해시코드)을 16진수로 제공한다.

public static void main(String[] args) {
	Object object = new Object();
    String string = object.toString();

    //toString() 반환값 출력
    System.out.println(string);

    //object 직접 출력
    System.out.println(object);
}

위 코드를 실행하면 출력값이 똑같이 나온다. 왜일까?
System.out.println() 메서드는 내부적으로 toString()을 호출한다고 한다.

만약 내가 만든 객체 MyObject 에서 toString() 메서드를 재정의 한다면 내가 재정의한 toString() 에 맞게 출력값이 나온다.

기본적으로는 객체의 참조값이 나오게 된다.

인텔리제이를 사용하고 있기 때문에 toString() 을 간단하게 재정의 할 수 있다!

Dog dog = new Dog("복실이", 5);

String refValue = Integer.toHexString(System.identityHashCode(dog));
System.out.println("dog의 참조값: " + refValue);

참고로 toString()을 재정의하면 객체의 참조값을 얻을 수 없는데,
System.identityHashCode() 을 사용하면 객체의 참조값을 얻어올 수 있고
Integer.toHexString() 을 사용해서 16진수로 표현할 수 있다.


참조

  • 김영한의 실전 자바 - 중급 1편을 공부하면서 작성했습니다.

0개의 댓글