본문 바로가기

Java/Java 문법

[Java] 오브젝트 클래스 (Object Class)

728x90
반응형

오브젝트 클래스 (Object Class)

 

모든 Object Class는 Java의 최상위 부모클래스이다.

 

따라서 Java의 모든 Class는 Object Class를 직간접적으로 상속받는다.

 

 

 

 

오브젝트 클래스의 역할

 

Java의 모든 클래스는 오브젝트 클래스에서 파생되므로 모든 클래스에서 오브젝트 클래스의 메서드를 사용할 수 있다.

 

즉, 오브젝트 클래스는 Java에 기본적인 메서드를 제공하는 역할을 한다.

 

 

 

 

 

오브젝트 클래스 메서드

 

- clone()

protected Object clone() throws CloneNotSupportedException

 

clone() 메서드는 현재 객체의 복사본을 생성하는 역할을 한다.

 

복사는 얕은 복사로 진행되기 때문에 깊은 복사를 사용하고 싶다면 오버라이딩을 해야 한다.

 

또한 만약 클래스가 Cloneable 인터페이스를 구현하지 않았다면 clone()을 호출할 때 CloneNotSupportedException 예외가 발생한다.

 

따라서 clone() 메서드는 필수적으로 try catch문을 활용하여 CloneNotSupportedException을 예외처리 해야 한다.

 

 

 

 

- equals()

public boolean equals(Object obj)

 

equals()는 인스턴스가 동일한지 검사하는 동작을 한다.

 

객체 내부의 값이 동일한지 확인하는 것이 아니라 참조 비교를 수행하여 메모리 상에 같은 위치를 참조하는지 검사한다.

 

따라서 일반적으로는 오버라이딩하여 객체의 필드가 동일한지 확인하도록 재정의한다.

 

 

 

 

- getClass()

public final Class<?> getClass()

 

getClass()는 객체가 실제로 어떤 클래스인지 확인하는 동작을 한다.

 

예를 들어 다음 코드와 같이 사용할 수 있다.

 

class Animal { }
class Dog extends Animal { }

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        System.out.println(myDog.getClass().getName());  // 출력: Dog
    }
}

 

instanceof()도 인스턴스가 어떤 클래스인지 확인하는 함수이지만 instanceof()는 인스턴스가 특정 클래스 또는 그 서브클래스인지 확인하는 용도로 사용된다.

 

Animal myDog = new Dog();

System.out.println(myDog instanceof Animal);  // true: Dog는 Animal의 하위 클래스
System.out.println(myDog.getClass() == Animal.class);  // false: myDog는 실제로 Dog 클래스의 인스턴스
System.out.println(myDog.getClass() == Dog.class);  // true: 실제 클래스는 Dog

 

 

 

 

- hashCode()

public native int hashCode();

 

객체의 해시코드(hashcode)를 반환하는 메서드이다.

 

 

 

 

- notify()

public final native void notify()

 

notify()는 멀티스레딩 환경에서 스레드 간의 통신을 위한 메서드로 대기 중인 스레드 중 하나를 깨워 실행 대기 상태로 전환시키는 역할을 한다.

 

 

 

 

- notifyAll()

public final native void notifyAll();

 

대기 상태에 있는 모든 스레드를 깨워 실행 대기 상태로 전환시킨다.

 

 

 

 

- wait()

public final void wait() throws InterruptedException
public final void wait(long timeout) throws InterruptedException
public final void wait(long timeout, int nanos) throws InterruptedException

 

스레드를 대기 상태로 만든다. 대기 중인 스레드는 notify() 혹은 notifyAll()에 의해서 깨어난다.

 

 

 

 

- toString()

public String toString()

 

toString()은 객체의 해시값을 16진수로 변환한 값과 객체의 클래스 이름을 반환한다.

 

반환형식은 "클래스명@해시값"의 형태이다.

 

 

 

 

728x90
반응형