상세 컨텐츠

본문 제목

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' 카테고리의 다른 글

Java의 시간 날짜 라이브러리 소개  (0) 2025.05.11
Java Generics에서 extends와 super의 차이점  (2) 2025.05.06
Concurrent Random Number  (0) 2024.09.24
ThreadLocal  (1) 2024.02.28
JVM 메모리 관리  (0) 2023.05.29

관련글 더보기

댓글 영역