Object 다형성

SungMin·2026년 5월 21일

자바 심화 정리

목록 보기
2/34

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

package lang.object.poly;

public class Car {
    public void move() {
        System.out.println("자동차 이동");
    }
}


package lang.object.poly;

public class Dog {
    public void sound() {
        System.out.println("멍멍");
    }
}


package lang.object.poly;

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

        action(dog);
        action(car);

    }

    public static void action (Object obj) {
        // obj.sound(); // 컴파일 오류, Object는 sound()가 없다.
        // obj.move(); // 컴파일 오류, Object는 move()가 없다.

        // 객체에 맞는 다운캐스팅 필요
        if (obj instanceof Dog dog) {
            dog.sound();
        } else if (obj instanceof Car car) {
            car.move();
        }
    }
}

Object 다형성의 장점

Object 클래스는 모든 객체의 부모이다.
따라서, 어떤 객체든지 언제든지 인자로 전달 할 수 있다.

action(dog) //main에서 dog 전달
void action(Object obj = dog(Dog)) //Object는 자식인 Dog 타입을 참조할 수 있다.

action(car) //main에서 car 전달
void action(Object obj = car(Car)) //Object는 자식인 Car 타입을 참조할 수 있다.

Object 다형성의 한계

action(dog) //main에서 dog 전달
private static void action(Object obj) {
obj.sound(); //컴파일 오류, Object는 sound()가 없다. }

action() 메서드 안에 obj를 호출하면 컴파일 에러가 발생한다.
매개변수인 obj는 Object 타입이기 때문이다.
Object 안에는 sound 메서드가 존재하지 않다.

따라서, 해당 문제를 해결하기 위해서는 다운캐스팅을 진행해야한다.

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

다형성을 제대로 활용하려면 다형적 참조와 메서드 오버라이딩을 활용해야한다.
Object 클래스는 모든 객체를 대상으로 다형적 참조를 할 수 있다.
Object 타입만으로는 자식 클래스 고유 기능을 직접 사용할 수 없다.
결국 각 객체의 기능을 활용하기 위해서는 다운 캐스팅이 필요하다.

Object는 모든 객체를 참조할 수 있지만, Object 타입에 정의된 기능만 사용할 수 있기 때문에 각 객체의 고유 기능을 사용하려면 다운캐스팅이 필요하다.


[정리]

  • Object는 모든 객체의 부모다.
  • 따라서 모든 객체를 참조할 수 있다.
  • 하지만 Object 타입으로는 Object에 정의된 기능만 사용할 수 있다.
  • 자식 고유 기능을 사용하려면 다운캐스팅이 필요하다.
profile
오늘도 한 걸음씩 나아가

0개의 댓글