모든 클래스의 최고 조상으로 멤버변수는 없고 오직 11개의 메서드만 가지고 있다.
equals(Object obj)
객체 자신과 주어진 객체를 비교한다.
Object 클래스에 정의된 equals()는 참조변수 값(객체의 주소)을 비교한다.
public boolean equals(Object obj) {
return (this==obj);
}
equals()를 오버라이딩해서 인스턴스 변수의 값을 비교하도록 바꿀 수 있다.
hashCode()
- 객체의 주소값으로 해시코드(int타입의 정수)를 만들어 반환한다.
- equals()를 오버라이딩하면 hashCode()도 같이 오버라이딩 해야 한다. equals()의 결과가 true인 두 객체의 hash code는 같아야 하기 때문이다.
- System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일한 결과를 반환한다.
toString()
객체의 정보를 문자열로 제공할 목적으로 정의된 메서드이다.
Object 클래스에 정의된 toString()은 아래와 같다.
public String toString() {
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
따라서 toString()을 오버라이딩하지 않으면 클래스이름에 16진수의 해시코드를 얻게 된다.
clone()
- 자신을 복제하여 새로운 인스턴스를 생성하는 메서드이다.
- Object 클래스에 정의된 clone()은 단순히 인스턴스변수의 값만 복사한다. 이 경우 복제된 인스턴스도 같은 주소를 갖는다.
- 인스턴스 변수가 참조형일 때, 참조하는 객체도 복제되게 오버라이딩해야 한다.
- Cloneable인터페이스를 구현한 클래스의 인스턴스만 복제할 수 있다.
- clone()을 오버라이딩하면서 접근 제어자를 protected에서 public으로 변경해야 상속관계가 없는 다른 클래스에서 clone()을 호출할 수 있다.
getClass()
- 자신이 속한 클래스의 Class객체를 반환하는 메서드이다.
- Class객체는 클래스의 모든 정보를 담고 있으며, 클래스당 단 1개만 존재한다.
- 클래스파일(.class)이 메모리에 로드될 때 생성된다.
클래스 정보가 필요하면 먼저 Class객체에 대한 참조를 얻어와야 한다.
Class cObj = new Card().getClass(); // 생성된 객체로부터 얻는 방법
Class cObj = Card.class; // 클래스 리터럴(.class)로 부터 얻는 방법
Class cObj = Class.forName("Card"); // 클래스 이름으로부터 얻는 방법
'JAVA' 카테고리의 다른 글
[java.lang] Math 클래스 (0) | 2023.03.09 |
---|---|
[java.lang] String 관련 클래스 (0) | 2023.03.09 |
예외처리 (0) | 2023.03.08 |
[OOP] 내부 클래스(inner class) (0) | 2023.03.08 |
[OOP] 인터페이스(interface) (0) | 2023.03.08 |