회원가입

Object 다형성 및 Object 배열

Beany 2024-11-18

ChatGPT 요약

객체 지향 프로그래밍에서 Object 클래스는 모든 클래스의 부모 클래스로, 모든 객체를 참조할 수 있는 다형성을 제공한다. 다형성을 통해 서로 관련 없는 클래스인 Dog와 Car를 동일하게 다룰 수 있고, Object 배열을 통해 모든 타입의 객체를 담을 수 있다. 만약 Object가 없다면 모든 객체를 받을 수 있는 메서드나 배열을 만들 수 없으며, 각자가 유사한 클래스를 개별적으로 정의해야 할 것이라는 한계가 있다.

Object 다형성


Object 는 모든 클래스의 부모 클래스이다. 따라서 Object 는 모든 객체를 참조할 수 있다.

예제를 통해서 Object 의 다형성에 대해 알아보자.

Dog Car 은 서로 아무런 관련이 없는 클래스이다. 둘다 부모가 없으므로 Object 를 자동으로 상속 받는다.

package lang.poly;

public class Car {
    public void move() {
        System.out.println("Car.move");
    }
}
package lang.poly;

public class Dog {
    public void sound() {
        System.out.println("Dog.sound");
    }
}
package lang.poly;

public class ObjectPolyExample1 {
    public static void main(String[] args) {
        Car car = new Car();
        Dog dog = new Dog();

        Object object = car;

        action(dog);
        action(car);
    }

    public static void action(Object object) {
        if (object instanceof Car car) {
            car.move();
        } else if (object instanceof Dog dog) {
            dog.sound();
        }
    }
}
Dog.sound
Car.move

Object를 활용한 다형성의 한계

  • Object 는 모든 객체를 대상으로 다형적 참조를 할 수 있다.
    • 쉽게 이야기해서 Object 는 모든 객체의 부모이므로 모든 객체를 담을 수 있다.
  • Object 를 통해 전달 받은 객체를 호출하려면 각 객체에 맞는 다운캐스팅 과정이 필요하다.
    • Object 가 세상의 모든 메서드를 알고 있는 것이 아니다.

 

 

Object 배열


이번에는 Object 배열을 알아보자.

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

package lang.poly;

public class ObjectPolyExample2 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Car car = new Car();
        Object object = new Object();

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

        size(objects);
    }

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

 

 

Object 가 없다면?


만약 Object 와 같은 개념이 없다면 어떻게 될까?

  • void action(Object obj) 과 같이 모든 객체를 받을 수 있는 메서드를 만들 수 없다.
  • Object[] objects 처럼 모든 객체를 저장할 수 있는 배열을 만들 수 없다.

물론 Object 가 없어도 직접 MyObject 와 같은 클래스를 만들고 모든 클래스에서 직접 정의한 MyObject 를 상속 받으면 된다. 하지만 하나의 프로젝트를 넘어서 전세계 모든 개발자가 비슷한 클래스를 만들 것이고, 서로 호환되지 않는 수 많은 XxxObject 들이 넘쳐날 것이다.

0 0
JAVA
이 공간은 개인 공부를 통해 얻은 정보를 체계적으로 정리하고 공유하는 곳입니다. 학습한 내용, 발견한 지식, 그리고 문제 해결 방법 등을 기록하여 나만의 학습 자료를 구축하고, 필요할 때 쉽게 참고할 수 있는 유용한 자원으로 활용할 수 있도록 합니다.
Yesterday: 456
Today: 47