상세 컨텐츠

본문 제목

Object class

Java

by Wanderer Kim 2025. 2. 16. 21:41

본문

728x90

Object 클래스란?

자가에서 모든 크랠스의 최상위 부모 클래스는 항상 Object 클래스이다.

  • 클래스에 상속 받을 부모 클래스가 없으면 묵시적으로 Object 클래스를 상속 받는다. 쉽게 이야기하면 자바가 자동으로 extends Object 코드를 넣어준다. 
  • 클래스에 상속 받을 부모 클래스르 명시적으로 지정하면 Object를 상속 받지 않는다.

자바에서 Object 클래스가 최상위 부모 클래스인 이유

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

공통 기능 제공

객체의 정보를 제공하고, 이 객체가 다른 객체와 같은지 비교하고, 객체가 어떤 클래스로 만들어졌는지 확인하는 기능은 모든 객체에게 필요한 기본 기능이다. 이런 기능을 객체를 만들 때 마다 항상 새로운 메서드를 정의해서 만들어야 한다면 상당히 번거로울 것이다.

Object는 이런 공통 기능들을 모든 객체에 제공하여 개발자가 해당 기능들을 편리하게 이용할 수 있게 한다.

Object가 제공하는 공통 기능

  • toString() : 객체의 정보를 문자열로 제공. 오버라이딩하지 않을 시 클래스이름@hashCode의 형태로 출력한다.
  • equals() : 객체의 같음을 비교하는 기능 제공
  • getClass() : 객체의 클래스 정보를 제공

다형성의 기본 구현

자바에서 부모는 자식을 담을 수 있다. Object는 모든 클래스의 부모 클래스이다. 따라서 모든 객체를 참조할 수 있다.

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

Object 다형성

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

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


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

public class ObjectPolyExample1 {
	public static void main(String[] args) {
		Dog dog = new Dog();
		Car car = new Car();
		action(dog);
		action(car);
	}
	private static void action(Object obj) {
		
		//객체에 맞는 다운캐스팅 필요
		if (obj instanceof Dog dog) {
			dog.sound();
		} else if (obj instanceof Car car) {
			car.move();
		}
	}
}

실행 결과

멍멍
자동차 이동

Object는 모든 타입의 부모다. 부모는 자식을 담을 수 있으므로 앞의 코드를 다음과 같이 변경해도 된다.

Object dog = new Dog(); //Dog -> Object
Object car = new Car(); //Car -> Object

 

Object 다형성의 장점

action(Object obj) 메서드는 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.sound()를 호출하면 오류가 발생한다. 왜냐하면 배개변수인 obj는 Object타입이기 때문이다. Object에는 sound() 메서드가 없다.

Dog 인스턴스의 sound() 를 호출하려면 다음과 같이 다운캐스팅을 해야한다.

if (obj instanceof Dog dog) {
	dog.sound();
}

결과적으로 다형적 참조는 가능하지만, 메서드 오버라이딩이 안되기 때문에 다형성을 활용하기에는 한계가 있다.

반응형

'Java' 카테고리의 다른 글

Concurrent Random Number  (0) 2024.09.24
[자바 성능 튜닝] 성능 테스트 접근법  (0) 2024.04.07
ThreadLocal  (1) 2024.02.28
JVM 메모리 관리  (0) 2023.05.29
Stream API 개요  (0) 2023.05.05

관련글 더보기

댓글 영역