Java - Object(java.lang)

KoK·2025년 3월 12일

JAVA

목록 보기
1/1
post-thumbnail

자바에서 Object클래스는 모든 클래스의 부모클래스이다.

자바는 상속을 통해 부모의 기능을 자식에게 물려줘서 사용할 수 있게 하는데,
상속을 받은 자식은 부모의 모든 기능을 사용할 수 있습니다.

public class Car {
    public void move() {
        System.out.println("차를 이동합니다.");
    }
    public void openDoor() {
        System.out.println("문을 엽니다.");
    }
}
public class ElectricCar extends Car {
    public void charge() {
        System.out.println("충전합니다.");
    }
}
public class GasCar extends Car {
    public void fillup() {
        System.out.println("기름을 주유합니다.");
    }
}

코드를 보면 ElectricCar와 GasCar는 모두 Car를 상속받는다. 그럼 ElectricCar와 GasCar는 Car클래스의 move()메소드와 openDoor()메소드를 사용할 수 있다.

그런데 여기서, Car클래스도 상속을 받고있다 그런데 왜 다른 클래스들 처럼 extends키워드를 명시하지 않았을까?

자바에서 모든 클래스의 부모클래스는 "Object클래스"이다. 클래스에 따로 상속을 명시하지 않으면 묵시적으로 Object클래스를 상속받는다.

Object클래스 다형성의 한계

Object클래스는 모든 클래스들의 부모이므로 모든 객체를 다 담을 수 있다.
하지만 Object를 통해 전달받은 메소드를 호출할 일이 있다면 그에 맞게 다운캐스팅을 해줘야한다.

다형성은 다형적 참조와 메서드 오버라이딩이 함께 이루어져야 한다. 그런데 Object클래스는 더 이상 상위 클래스가 없기 때문에 메서드 오버라이딩에 한계가 생긴다. Object클래스가 세상의 모든 메서드들을 다 알고있는건 아니기 때문이다.

java.lang 패키지

자바가 기본으로 제공하는 라이브러리중 가장 기본이 되는 패키지이다. Language의 줄임말이다.

대표적인 클래스들
Object : 모든 자바 객체의 부모 클래스
String : 문자열
Integer, Long, Double : 래퍼타입, 기본형 데이터 타입을 객체로 만든 것
Class : 클래스 메타 정보
System : 시스템과 관련된 기본 기능들을 제공

이 외에도 java.lang패키지의 Object클래스 에서 제공하는 메서드들도 있는데 간략하게 알아보자
toString() : 객체의 정보를 제공
equals() : 객체의 같음을 비교
getClass() : 객체의 클래스정보를 제공

정적 의존관계와 동적 의존관계

정적 의존관계 : 컴파일 시간에 결정되며 주로 클래스 간의 관계를 의미, 프로그램을 실행하지 않고, 클래스 내에서 사용하는 타입들만 보면 쉽게 의존관계를 파악할 수 있다.

동적 의존관계 : 런타임 시간에 확인 가능한 의존관계, 런타임에 어떤 인스턴스를 사용하는지를 나타내는 것

참고로 단순히 의존관계 또는 어디에 의존한다고 하면 보통은 정적 의존관계를 뜻한다.

정리

Object클래스는 자바의 모든 클래스들의 부모 클래스이고 Object클래스가 제공하는 메소드들도 개발자들이 사용하는 공통기능을 제공해준다.

하지만 Object클래스는 더 이상 상위의 상속을 받는 클래스가 없기 때문에 다형성을 활용하는데 있어서 한계가 있다.

profile
개발 이것저것

0개의 댓글