키보드워리어

[자바] 객체 클래스(Object Class)는 상속의 최상위 클래스 본문

JAVA/입문

[자바] 객체 클래스(Object Class)는 상속의 최상위 클래스

꽉 쥔 주먹속에 안경닦이 2023. 3. 6. 13:59
728x90

안녕하세요 【키보드 워리어】

 

⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다.

 

오늘은 여러 클래스 중에서 Object(객체 클래스)에 대해 알아보겠습니다.

 


 

Object

객체 지향 프로그래밍에서는 클래스를 정의할 때, 다른 클래스를 상속받아서 기능을 확장하거나 수정할 수 있습니다.

 

이러한 상속 관계에서 상위 클래스를 부모 클래스 또는 슈퍼 클래스(super class)라고 부르며,

하위 클래스를 자식 클래스 또는 서브 클래스(sub class)라고 부릅니다.

 

Java에서도 클래스의 상속 관계를 정의할 수 있으며, 기본적으로 Object 클래스를 자동으로 상속받습니다. Object 클래스는 Java의 클래스 계층 구조에서 가장 상위에 위치한 클래스로, 모든 클래스에서 상속 계층 구조의 가장 꼭대기에 있습니다.

 

..?

 

그래서!!!

Object클래스
Object클래스

만약 우리가 만든 클래스에서 toString()과 같은 메서드를 구현하지 않았음에도, 이 메서드를 호출할 수 있는 이유는 바로 Object 클래스에서 해당 메소드를 구현하고 있기 때문입니다. 이렇게 모든 클래스는 Object 클래스의 메소드와 필드들을 상속받아 사용할 수 있습니다.


Object 클래스에서는 다음과 같은 메서드들을 제공합니다.

  • toString(): 객체를 문자열로 표현하는 메서드
  • equals(): 객체의 내용이 같은지를 비교하는 메서드
  • hashCode(): 객체의 해시 코드를 반환하는 메서드
  • getClass(): 객체의 클래스 정보를 반환하는 메서드
  • notify(): 객체의 대기 중인 스레드 중 하나를 깨우는 메서드
  • wait(): 스레드를 대기 상태로 만드는 메서드

이러한 메소드들은 Java에서 모든 클래스에서 사용할 수 있으며, 상속 관계를 통해 하위 클래스에서도 사용할 수 있습니다. 이를 통해 Java에서는 객체 지향 프로그래밍의 다형성 개념을 지원합니다.(나중에 포스팅하겠습니다.)

 

또한, Object 클래스는 모든 클래스의 부모 클래스이므로, 다형성 개념을 활용하여 객체를 보다 일반적인 방식으로 다룰 수 있습니다. 예를 들어, 다음과 같이 Object 클래스 타입으로 변수를 선언하면, 이 변수는 어떤 클래스의 객체를 참조할 수도 있습니다.

 

Object obj = new Person();

 

Object클래스를 상속한 Person클래스
위의 코드는 실제 이런 상황입니다.

따라서, Java에서는 Object 클래스가 모든 클래스에서 기본적으로 상속되므로, 이 클래스에 정의된 메서드와 필드를 활용하여 객체를 보다 유연하게 다룰 수 있습니다.

 

 

Java에서 toString()메서드 사용과 오버라이딩

 

위에 잠깐 소개된 toString에 대해 설명해 드릴게요.

 

Java에서 모든 클래스는 기본적으로 Object 클래스를 상속받습니다. 따라서, 모든 클래스는 Object 클래스에서 정의된 메서드와 필드를 상속받아 사용할 수 있습니다. 이 중에서, Object 클래스에는 toString() 메서드가 정의되어 있습니다.

 

toString() 메서드는 객체를 문자열로 표현하는 메소드입니다. 기본적으로 Object 클래스의 toString() 메소드는 객체의 클래스 이름과 객체의 해시 코드를 반환합니다. 이는 객체의 기본 용도를 제공하기 위한 기본값입니다.

그러나, 클래스에서 이 toString() 메서드를 오버라이딩하여 클래스에 맞게 수정할 수도 있습니다. 이렇게 오버라이딩한 toString() 메서드는 클래스의 용도와 맞게 객체를 문자열로 표현할 수 있습니다.

 

toString() 메소드는 클래스에서 가장 많이 오버라이딩하는 메소드 중 하나이며, 객체를 디버깅하기 위해 자주 사용됩니다. 디버깅 과정에서 객체의 정보를 문자열로 출력하여 객체의 상태를 파악할 수 있습니다.

 

다음은 Person 클래스에서 toString() 메서드를 오버라이딩하는 예시입니다.

 

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }
}

위의 예시에서는 Person 클래스에서 toString() 메소드를 오버라이딩하여, 객체의 이름과 나이를 포함한 문자열을 반환하도록 수정하였습니다. 이렇게 오버라이딩한 toString() 메소드를 호출하면, 객체의 정보를 쉽게 파악할 수 있습니다.

 

따라서, Java에서는 Object 클래스에서 기본적으로 제공되는 toString() 메서드를 상속받아 사용할 수 있으며, 클래스에 맞게 수정하여 오버라이딩할 수 있습니다. toString() 메소드는 디버깅을 위해 자주 사용되며, 객체를 문자열로 표현하여 객체의 상태를 파악하는 데 사용됩니다.

 

하지만, 모든 클래스에서 toString() 메서드를 오버라이딩할 필요는 없습니다. 만약 클래스에서 toString() 메소드를 오버라이딩하지 않으면, Object 클래스에서 상속받은 toString() 메서드가 사용됩니다. 이 toString() 메소드는 객체의 클래스 이름과 객체의 해시 코드를 반환합니다.

 

다음은 Person 클래스에서 toString() 메소드를 오버라이딩하지 않은 예시입니다.

 

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

위의 예시에서는 Person 클래스에서 toString() 메소드를 오버라이딩하지 않았습니다. 따라서, Object 클래스에서 상속받은 toString() 메소드가 사용됩니다. 다음은 이 toString() 메소드를 호출한 결과입니다.

 

Person person = new Person("Keyboardwarrior", 30);
System.out.println(person.toString());

// print Person@6e8cf4c6

위의 결과에서 볼 수 있듯이, Person 클래스에서 toString() 메소드를 오버라이딩하지 않았으므로, Object 클래스에서 상속받은 toString() 메소드가 객체의 클래스 이름과 해시 코드를 반환하였습니다.

 
728x90