java.lang패키지는 자바 프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다.
때문에 이 패키지의 클래스들은 import문 없이도 사용할 수 있게 되어 있다.
String클래스, System클래스 등을 import문 없이 사용할 수 있었던 이유가 java.lang패키지에 속해있는 클래스들이기 때문이다!
그 중 자주 사용되는 클래스는 Object 클래스 이다.
public boolean equals(Object obj) {
return(this == obj);
}
Object클래스의 equals 메서드는 매개변수로 참조변수를 받아 비교하여 그 결과를 boolean값으로 알려주는 역할을 한다.
따라서 그 객체의 주소값만 비교하게 되는데 객체가 담고있는 내용을 비교하기 위해서는 equals 메서드를 오버라이딩하여 사용해야 한다.
Class Person {
int id;
public boolean equals(Object obj) {
if(obj instanceof Person) {
return id == ((Person)obj).id;
// id값 비교를 위해 Person타입으로 형변환
}else {
return false;
// Person타입이 아니면 바로 false반환
}
Person(long id) { // Person 생성자
this.id = id;
}
}
Class Ex01 {
public static void main(String[] args) {
Person p1 = new Person(1001);
Person p2 = new Person(1001);
if(p1.equals(p2)) { // 오버라이딩된 equals메서드 사용
System.out.println("p1과 p2는 같은 사람입니다.")
}else {
System.out.println("p1과 p2는 다른 사람입니다.")
}
}
}
}
해시함수는 찾고자하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드(hash code)를 반환한다.
Object클래스에 정의된 hashCode메서드는 객체의 주소값을 이용해서 해시코드를 만들어 반환하기 때문에 서로 다른 두 객체는 같은 해시코드를 가질 수 없다.
하지만 String클래스는 문자열의 내용이 같으면, 동일한 해시코드를 반환하도록 오버라이딩 되어 있기 때문에, 문자열의 내용이 같은 객체는 항상 동일한 해시코드값을 가진다.
이 메서드는 인스턴스에 대한 정보를 문자열로 나타낸다.
public String toString() {
return getClass().getName() + "@"
+ Integer.toHexString(hashCode());
}
클래스를 작성할 때 toString 메서드를 오버라이딩 하지 않으면 16진수의 코드를 얻게 된다.
하지만 String클래스의 toString()은 문자열을 반환하도록 오버라이딩 되어있다. Date클래스의 경우 Date인스턴스가 갖고있는 날짜와 시간을 문자열로 반환하도록 오버라이딩 되어있다.
이처럼 toString()은 일반적으로 인스턴스나 클래스에 대한 정보 또는 인스턴스 변수들의 값을 문자열로 변환하여 반환하는 것이 일반적이다.
protected Object clone()
객체 자신의 복사본을 반환한다.
public Class getClass()
객체 자신의 클래스 정보를 담고 있는 Class인스턴스를 반환한다.
public void notify() : 객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨운다.
public void notifyAll() : 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다.
public void wait()
public void wait( long time )
public void wait( long time, int nanos )
다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간동안 기다리게 한다.
(timeout은 천분의 1초, nanos는 10^9분의 1초)
🔥 한줄평
굉장히 유용한 메서드로 한번쯤은 써봤기 때문에 익숙하다.
원래의 메서드 형태를 알게되어 좋았다.