[Java] java.lang.Object

Published: by Creative Commons Licence

참고 문서

Object 클래스는 모든 클래스의 상속계층도 상 가장 위에 위치하는 조상클래스다. 자바 컴파일러는 아무것도 상속하지 않는 클래스를 컴파일 할 때 자동으로 Object 클래스를 상속받도록 한다.

Object 클래스는 소유한 변수(=멤버변수)가 없고 11개의 메서드만 존재한다.

주요 메서드

clone()

객체 자신의 복제본을 반환한다. 이 메서드는 프로퍼티의 값을 단순 복사하기 때문에 참조값을 다룰 때는 주의해야 한다. 또한 이 메서드를 사용할 경우 반드시 Cloneable 인터페이스를 implements 해야한다. 그렇지 않으면 CloneNotSupportedException이 발생한다.

public class LogicTest {
    public static void main(String... args) throws CloneNotSupportedException {
        Doppelganger c = new Doppelganger();
        System.out.println(c.getAa()); // 1234

        c.setAa("asdasd");

        Doppelganger cc = (Doppelganger) c.clone();
        System.out.println(cc.getAa()); // asdasd
    }
}

class Doppelganger implements Cloneable {
    private String aa = "1234";

    public String getAa() {
        return aa;
    }

    public void setAa(String aa) {
        this.aa = aa;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

equals( Object obj )

객체 자신과 obj가 같은 객체인지 불리언값으로 반환. 참조값을 비교하므로 동등비교 연산자==와 결과가 같다.

String의 equals() 는 String 클래스에서 오버라이드 된 메서드로 객체가 갖는 문자열 값을 비교하는 반면 이 메서드는 객체 자신의 참조값과 전달인자로 받는 객체의 참조값을 비교하는 차이가 있다.

// equals의 실제 코드
public boolean equals(Object obj) {
    return (this == obj);
}

toString()

클래스명 + @ + 해시코드를 16진수로 변환해 반환한다.

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

notify(), notifyAll()

이 객체를 사용하려고 대기중엔 쓰레드를 하나 혹은 모두 재개한다.

finalize()

이 객체에 대한 참조가 더 이상 없다고 판단될 때(즉, 소멸될 때) 가비지 컬렉터에 의해 자동으로 호출되는 메서드

getClass()

Class 인스턴스를 반환한다. 이 인스턴스는 객체 자신의 클래스 정보를 갖는다.

hashCode()

객체 자신의 해시코드(=해시값)를 반환한다. Object 클래스의 기본 hashCode() 구현은 객체의 메모리 주소나 이와 유사한 방법을 사용하여 해시코드를 생성한다고 한다.

wait( [long timeout] [, int nanos] )

쓰레드를 지정된 시간동안 기다리게 한다. timeout은 10^-3초, nanos는 10^-9초를 의미한다. 전달인자가 없으면 notify(), notifyAll()을 호출할 때까지 대기한다.