Java Object 클래스

유방현·2024년 10월 22일

Java에서 Object 클래스는 모든 클래스의 최상위 클래스입니다. 이 클래스의 중요성과 주요 메서드들에 대해 자세히 알아보겠습니다.

1. Object 클래스란?

Object 클래스는 java.lang 패키지에 속해 있으며, 모든 Java 클래스의 루트 클래스입니다. 즉, 모든 클래스는 자동으로 Object 클래스를 상속받습니다.

public class MyClass { // 암시적으로 extends Object가 포함됩니다.
    // 클래스 내용
}

2. Object 클래스의 주요 메서드

2.1. toString() 메서드

  • 기능: 객체의 문자열 표현을 반환합니다.
  • 기본 구현: getClass().getName() + '@' + Integer.toHexString(hashCode())
  • 오버라이딩: 객체의 의미 있는 문자열 표현을 제공하기 위해 자주 오버라이드됩니다.
@Override
public String toString() {
    return "MyClass{attribute1=" + attribute1 + ", attribute2=" + attribute2 + "}";
}

toString()의 주요 사용 사례

디버깅과 로깅

  • toString() 메서드는 주로 디버깅로그 기록에서 유용하게 사용됩니다. 객체의 상태를 쉽게 확인하고, 코드의 흐름을 파악하는 데 도움을 줍니다.

객체의 직관적 표현

  • 사용자 정의 클래스에서 toString()을 오버라이딩하면, 객체를 보다 직관적으로 표현할 수 있습니다. 예를 들어, 데이터베이스 레코드사용자 정보 등을 출력할 때 객체의 속성을 문자열로 변환하여 더 쉽게 읽을 수 있습니다.

컬렉션 출력

  • 자바의 컬렉션 클래스(ArrayList, HashMap 등)는 내부에 저장된 객체들의 toString() 메서드를 호출하여 출력합니다. 객체의 toString() 메서드를 오버라이딩하면, 컬렉션에 포함된 객체들도 가독성 있게 출력됩니다.

2.2. equals() 메서드

  • 기능: 두 객체의 동등성을 비교합니다.
  • 기본 구현: 참조 동등성 (==)을 검사합니다.
  • 오버라이딩: 객체의 내용 비교를 위해 오버라이드하는 것이 일반적입니다.
@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    MyClass myClass = (MyClass) obj;
    return Objects.equals(attribute1, myClass.attribute1) &&
           Objects.equals(attribute2, myClass.attribute2);
}

2.3. hashCode() 메서드

  • 기능: 객체의 해시 코드 값을 반환합니다.
  • 용도: 해시 기반 컬렉션(HashMap, HashSet 등)에서 사용됩니다.
  • 규칙: equals()를 오버라이드할 때 반드시 hashCode()도 오버라이드해야 합니다.
@Override
public int hashCode() {
    return Objects.hash(attribute1, attribute2);
}

2.4. clone() 메서드

  • 기능: 객체의 복사본을 생성합니다.
  • 특징: protected 메서드이며, Cloneable 인터페이스를 구현해야 사용 가능합니다.
  • 주의: 깊은 복사(deep copy)를 위해서는 오버라이딩이 필요할 수 있습니다.
@Override
protected Object clone() throws CloneNotSupportedException {
    return super.clone();
}

2.5. getClass() 메서드

  • 기능: 객체의 런타임 클래스를 반환합니다.
  • 용도: 리플렉션(Reflection)에서 주로 사용됩니다.
Class<?> clazz = obj.getClass();
System.out.println("Class name: " + clazz.getName());

2.6. finalize() 메서드

  • 기능: 객체가 가비지 컬렉션되기 전에 호출됩니다.
  • 주의: Java 9부터 deprecated되었으며, 사용을 권장하지 않습니다.

2.7. wait(), notify(), notifyAll() 메서드

  • 기능: 스레드 동기화에 사용됩니다.
  • wait(): 다른 스레드가 이 객체의 notify() 또는 notifyAll()을 호출할 때까지 현재 스레드를 대기 상태로 만듭니다.
  • notify(): 이 객체의 모니터에 대기 중인 단일 스레드를 깨웁니다.
  • notifyAll(): 이 객체의 모니터에 대기 중인 모든 스레드를 깨웁니다.

3. Object 클래스의 중요성

  1. 다형성: 모든 객체를 Object 타입으로 참조할 수 있어 다형성을 지원합니다.
  2. 공통 기능: 모든 객체가 공통으로 가져야 할 기본적인 기능을 제공합니다.
  3. API 설계: Java API의 많은 메서드가 Object 타입을 파라미터로 받거나 반환합니다.

결론

Object 클래스는 Java 객체 지향 프로그래밍의 근간을 이루는 중요한 클래스입니다. 이 클래스의 메서드들을 잘 이해하고 적절히 오버라이딩하는 것은 효과적인 Java 프로그래밍을 위해 필수적입니다.

0개의 댓글