Stay Hungry Stay Foolish

자바/자바 중급

[자바 중급] 01. Object 클래스

dev스카이 2024. 9. 28. 15:07

Object 클래스

자바에서 모든 클래스의 최상위 부모 클래스는 항상 Object 클래스이다. 부모를 상속받으려면 'extends'를 명시적으로 붙여 상속을 받아야 한다. 그러나 Object 클래스는 'extends'를 붙이지 않아도 상속된다. 즉 부모가 없으면 묵시적으로 Object 클래스를 상속받는다. 

 

Object 클래스가 최상위 부모 클래스인 이유는 다음과 같다. 

  • 공통 기능 제공
    • 객체의 정보를 제공하는 toString()
    • 객체의 같음을 비교하는 equals()
    • 객체의 클래스 정보를 제공하는 getClass()
    • 기타 여러가지 기능
  • 다형성의 기본 구현

 

Object 다형성의 장점

  • 어떤 객체든지 인자로 전달할 수 있다는 장점이 있다.

 

한계

  • Object는 모든 객체를 대상으로 다형적 참조를 할 수 있다. 
  • Object를 통해 전달 받은 객체를 호출하려면 각 객체에 맞는 다운캐스팅 과정이 필요하다.

※ 다형적 참조는 가능하지만, 메서드 오버라이딩이 안되기 때문에 다형성을 활용하기에는 한계가 있다. 그렇다면 Object를 언제 활용하면 좋을지 다음을 알아보자.

 

 

1. Object 배열

Object는 모든 타입의 객체를 담을 수 있다. 따라서 Object[]을 만들면 세상의 모든 객체를 담을 수 있는 배열을 만들 수 있다.

 

예시

package lang.object.poly;

public class ObjectPolyExample2 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Car car = new Car();
        Object object = new Object(); //Object 인스턴스도 만들 수 있다.

        Object[] objects = {dog, car, object};
        size(objects);
    }

    private static void size(Object[] objects) {
        System.out.println("전달된 객체의 수는 : " + objects.length);
    }
}

 

실행 결과

전달된 객체의 수는: 3

 

 

2. toString()

Object.toString() 메서드는 객체의 정보를 문자열 형태로 제공한다. 그래서 디버깅과 로깅에 유용하게 사용된다.

 

예시

package lang.object.tostring;

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

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

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

 

실행 결과

java.lang.Object@a09ee92
java.lang.Object@a09ee92

 

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

 

 

'자바 > 자바 중급' 카테고리의 다른 글

[자바 중급] 06. 날짜와 시간  (1) 2024.10.09
[자바 중급] 05. 열거형 Enum  (0) 2024.10.08
[자바 중급] 04. Wrapper class  (2) 2024.09.30
[자바 중급] 03. String 클래스  (0) 2024.09.29
[자바 중급] 02. 불변 객체  (0) 2024.09.28