[Java] Object 클래스

2025. 2. 4. 15:58·TIL/Java

java.lang 패키지

  • java.lang 패키지는 자바가 기본으로 제공하는 라이브러리이다
  • 자바를 사용할 때 가장 기본이 되는 클래스들을 포함하고 있는 패키지이다
  • 기본 제공 패키지이기 때문에 클래스 작성시 import를 해주지 않아도 사용할 수 있다

대표 패키지

  • Object 
  • String
  • Interger, Long, Double
  • Class
  • System

Object 클래스

  • 자바에서 모든 클래스의 최상위 부모는 항상 Object 클래스가 된다
  • 즉 모든 객체는 Object를 상속받고 있다는 것으로 클래스를 작성할 때 명시적으로 상속을 받지 않으면 바로 Object 클래스를 자동으로 상속받게 된다
  • 만약 명시적으로 상속을 받게 되면? 상속한 부모 클래스를 타고 올라가보면 결국 Object 클래스가 존재한다
public class Parent {

    public void parentMethod() {
        System.out.println("Parent.parentMethod");
    }
}

 

  • Parent 클래스는 명시적으로 상속을 받고 있지 않기 때문에 Object 클래스를 상속받게 된다
public class Child extends Parent {

    public void childMethod() {
        System.out.println("Child.childMethod");
    }
}
public class ObjectMain {

    public static void main(String[] args) {
        Child child = new Child();
        child.childMethod();
        child.parentMethod();


        String string = child.toString();
        System.out.println(string);
    }
}
    • ObjectMain의 main 메서드를 실행하게 되면 child 인스턴스에서 childMethod() 와 parentMethod()를 호출할 수 있다
    • 근데 위에서 선언하지 않은 toString() 이라는 메서드 또한 호출할 수 있는 것을 알 수 있다
    • 이 toString() 메서드가 바로 Object 클래스가 제공하는 메서드인 것이다
    • 의존 관계를 살펴보면 다음과 같다.

  • Child 타입 child는 참조하는 인스턴스의 가장 하위 클래스부터 toString() 메서드가 존재하는지 확인한다
  • 없다면 부모 클래스로 올라가서 확인한다
  • Object 클래스에 toString() 메서드가 있는 것을 확인하고 Object.toString() 을 호출하게 된다

그렇다면 왜 Object 클래스가 최상위 부모 클래스가 되어야 했을까?

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

공통 기능 목적의 제공

  • 객체의 정보를 출력한다
  • 객체와 객체를 비교한다
  • 객체가 어떤 클래스로부터 만들어졌는지 확인한다
  • 등등
  • 객체라면 활용할 수 있는 공통적인 기능들이 있을텐데, Object 클래스에 해당 기능들을 구현해두고 이를 자동으로 상속받게 함으로써 공통 기능을 모든 객체에서 활용할 수 있게 된다
  • toString() , equals() , hashCode() 등과 같은 메서드들이 이에 해당한다

다형성의 기본 구현

  • 부모 클래스 타입은 자식 클래스 객체를 참조할 수 있다.
  • Object는 최상위 부모 클래스이기 때문에 모든 객체를 참조할 수 있게 된다. 이를 통해서 다양한 타입의 객체를 통합적으로 처리할 수 있게 해준다

메서드를 통한 다형적 참조

public class Person {

    public void run() {
        System.out.println("달린다");
    }
}
public class Bird {

    public void fly() {
        System.out.println("난다");
    }
}
public class ObjectMain {

    public static void main(String[] args) {
        Person p = new Person();
        Bird b = new Bird();

        action(p);
        action(b);

    }

    private static void action(Object obj) {
    
    }
}
  • 다음과 같이 Object를 매개변수의 타입으로 설정해두면 인자로 어떤 객체든 들어갈 수 있다.
  • 다만 이렇게 될 경우 obj에서 Person과 Bird의 메서드에 접근하지는 못한다.
  • 만약 각 클래스의 메서드에 접근하고 싶다면 다운캐스팅이 필요하다
  • 다형성을 제대로 활용하려면 '다형적 참조' + '메서드 오버라이딩'을 함께 사용해야하는데 그런면에서 Object는 클래스들이 활용할 수 있는 기본 메서드만 제공하고 있기에 Object를 활용한 다형성에는 한계가 있다

배열을 통한 다형적 참조

public class ObjectMain {

    public static void main(String[] args) {
        Person p = new Person();
        Bird b = new Bird();

		Object[] objs = {p ,b};
    }
}
  • Object 배열을 통해 모든 객체를 담아서 처리할 수 있다

'TIL > Java' 카테고리의 다른 글

[Java] equals()  (0) 2025.02.05
[Java] toString()  (0) 2025.02.04
[Java] 추상 클래스  (1) 2025.02.04
[Java] 인터페이스  (0) 2025.02.04
[Java] 클래스의 생성자  (0) 2025.02.03
'TIL/Java' 카테고리의 다른 글
  • [Java] equals()
  • [Java] toString()
  • [Java] 추상 클래스
  • [Java] 인터페이스
Charlie.han
Charlie.han
백엔드 개발자가 되기 위해 공부한 것들(Java, Spring, SQL, 네트워크, AWS 등)을 기록하고 공유하는 블로그입니다.
  • Charlie.han
    Chalie's Devlog
    Charlie.han
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • TIL (32)
        • Java (20)
        • Spring (2)
        • SQL (5)
        • 알고리즘 (4)
        • 트러블슈팅 (1)
      • WIL (0)
        • 카카오테크 부트캠프 (0)
  • 태그

    타입안전열거형
    묵시적형변환
    SQL
    제네릭 클래스
    프로그래머스 소수찾기 자바
    sql where
    default메서드
    다형성
    인텔리제이 한글 깨짐
    인텔리제이한글
    프로그래머스 베스트앨범 자바
    프로그래머스 소수찾기
    unsupported characters for the charset 'iso-8859-1'
    참조공유
    프로그래머스 베스트앨범
    자바
    데이터베이스
    불변객체
    프로그래머스
    string
    object
    컬렉션프레임워크
    static 필드
    sql limit
    super()
    인터페이스
    static메서드
    인스턴스
    Java
    jdk란?
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Charlie.han
[Java] Object 클래스
상단으로

티스토리툴바