JAVA Object 클래스

Noahddd·2024년 10월 29일

JAVA

목록 보기
10/12

공부의 정리 및 복습을 위한 기록입니다.

JAVA의 Object 클래스는 모든 클래스의 최상위 부모클래스이다.
최상위 부모클래스이기 때문에 당연히 자바에서의 모든 클래스는 오브젝트 클래스를 상속 받는다.
여기서 상속의 개념을 이미 알고있다면 extends Object를 하지 않았는데 왜 상속을 받는다고 생각할 수도 있다.
이는 자바에서 묵시적 상속을 통해서 오브젝트 클래스를 상속 받을 수 있도록 하기 때문이다. 즉 extends ....로 명시를 해주지 않는다면 모든 클래스는 오브젝트 클래스를 상속 받는다.

Object Class는 메서드로만 구성이 되어으며, 이 메서드들은 오버라이딩을 통하여 사용자가 원하는 대로 재정의 하여 사용할 수 있다.
그렇다면 오브젝트 클래스가 필요한 이유는 다음과 같다.
오브젝트 클래스는 미리 정의해놓은 이름과 기능의 다양한 메서드를 제공하기 때문에 많은 개발자들이 코딩을 하며 각각의 메서드를 정의하여 사용한다고 하면 일관성이 떨어질 수 있다. 이러한 이유 때문에 자바에서는 오브젝트 클래스와 메서드를 제공하여 공통 기능을 제공하고 일관성을 높혀준다.

다음은 오브젝트 클래스의 대표적인 메서드로

  • toString()
  • equals()
  • hashCode()
  • getClass()

등이 있다.


위와 같이 오브젝트 클래스의 메서드를 보면 이미 정의가 되어 있는 것을 볼 수있다.

대표적으로 toString()과 equals() 메서드의 사용 예제를 코드를 보며 정리해보자.

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

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

우선 테스트를 위해 클래스를 하나 만들어 준 뒤

    ObjTest obj1 = new ObjTest("홍길동", 30);
    ObjTest obj2 = new ObjTest("홍길동", 30);

    System.out.println(obj1 == obj2);
    System.out.println(obj1.equals(obj2));
    System.out.println(obj1.toString());

    

값 비교를 위해 ==와 equals 메서드를 통하여 객체의 동등 비교를 해보았을 때 값은
false
false
로 출력되며
toString 메서드를 이용하면
ObjTest@640e35f1와 같이 출력된다. 여기서 @뒤는 해시코드를 16진수 문자열로 변환 한 값을 출력한다.
위 사진에 toString() 메서드의 정의된 내용을 보면 이해하기가 쉽다.

이제 ObjTest 클래스에서 toString과 equals 메서드에 대하여 아래와 같이 재정의후 다시 한번 결과를 보려고 한다.

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

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

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

@Override
public boolean equals(Object object) {
    if (this == object) return true;
    if (object == null || getClass() != object.getClass()) return false;
    ObjTest objTest = (ObjTest) object;
    return age == objTest.age && Objects.equals(name, objTest.name);
}

위와 같이 메서드 오버라이딩 후 출력 결과를 보면

false
true
name : 홍길동, age : 30
와 같이 출력 되는 것을 볼 수있다.

여기서 == 는 객체의 참조값을 비교하는 것이며,
equals 메서드는 객체의 참조값이 아닌 객체의 값을 비교하기위해 재정의를 하였기 때문에
true로 나오는 것을 볼 수 있다.
또한 toString 메서드도 ObjTest의 name, age를 반환 할 수 있게 재정의를 하였기 때문에
name : 홍길동, age : 30 와 같이 출력이 된다.

공부하며 정리와 복습을 위해 저장한 기록입니다. 틀린 부분 및 개선할 부분이 있다면 알려주시면 감사하겠습니다 !

profile
꿈이 많은 개발자 호소인

0개의 댓글