java.lang패키지의 클래스들은 import문 없이도 사용할 수 있다.
모든 클래스의 최고 조상이기 때문에 Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능하다.
매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로 알려 주는 역할
equals메서드로 Value인스턴스가 가지고있는 value값을 비교하도록 하기 위해서는 Value클래스에서 equals메서드를 오버라이딩하여 주소가 아닌 객체에 저장된 내용을 비교하도록 변경하면 된다.
String, Date, File, wrapper클래스의 equals메서드는 주소값이 아닌 내용을 비교하도록 오버라이딩되어 있다.
해싱(hashing)기법에 사용되는 '해시함수(hash function)'를 구현한 것
해시함수는 찾고자하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드(hash code)를 반환한다.
클래스의 인스턴스변수 값으로 객체의 같고 다름을 판단해야하는 경우라면 equals메서드 뿐 만아니라 hashCode메서드도 적절히 오버라이딩해야하 한다.
같은 객체라면 hashCode메서드를 호출했을 때의 결과값인 해시코드도 같아야 하기 때문이다.
인스턴스에 대한 정보를 문자열(String)로 제공할 목적으로 정의한 것
인스턴스의 정보를 제공한다는 것은 대부분 인스턴스 변수에 저장된 값들을 문자열로 표현한다는 뜻이다.
toString()은 일반적으로 인스턴스나 클래스에 대한 정보 또는 인스턴스 변수들의 값을 문자열로 변환하여 반환하도록 오버라이딩되는 것이 보통이다.
자신을 복제하여 새로운 인스턴스를 생성하는 일을 한다.
Object클래스에 정의된 clone()은 단순히 인스턴스변수의 값만 복사하기 때문에 참조타입의 인스턴스 변수가 있는 클래스는 완전한 인스턴스 복제가 이루어지지 않는다. (복제된 인스턴스의 작업이 원래의 인스턴스에 영향을 미치게 된다)
이런 경우 clone메서드를 오버라이딩해서 사용한다.
clone()을 사용하려면
class Point implements Cloneable { // 1. Cloneable인터페이스를 구현한다.
...
public Object clone() { // 2. 접근 제어자를 protected에서 public으로 변경
Object obj = null;
try {
obj = super.clone(); // 3. try-catch내에서 조상클래스의 clone()을 호출
} catch (CloneNotSupportedException e) {}
return obj;
}
}
인스턴스의 데이터를 보호하기 위해서 Cloneable인터페이스를 구현한 클래스의 인스턴스만 clone()을 통한 복제가 가능하다.
JDK1.5부터 추가되었는데, 오버라이딩할 때 조상 메서드의 반환타입을 자손 클래스의 타입으로 변경을 허용하는 것
public Point clone() { // 1. 반환타입을 Object에서 Point로 변경
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {}
return (Point)obj; // 2. Point타입으로 형변환한다.
}
배열, Vector, ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap, Calendar, Date클래스들은 clone()을 이용해서 복제가 가능하다.
얕은 복사(shallow copy)
깊은 복사(deep copy)
자신이 속한 클래스의 Class객체를 반환하는 메서드
Class객체는 클래스의 모든 정보를 담고 있으며, 클래스 당 1개만 존재한다. 그리고, 클래스파일이 '클래스 로더(ClassLoader)에 의해서 메모리에 올라갈 때, 자동으로 생성된다.
생성된 객체로 부터 얻는 방법
Class cObj = new Card().getClass();
클래스 리터럴(*.class)로 부터 얻는 방법
Class cObj = Card.class;
클래스 이름으로 부터 얻는 방법
Class cObj = Class.forName("Card");