[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)
  • 태그

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

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

티스토리툴바