[JAVA] Object클래스와 메소드 종류
Object 클래스
- Object 클래스는 클래스 계층 구조의 최상위에 있는 클래스이다.
- 그렇기 때문에 모든 클래스는 자동으로
Object
클래스를 상속받는다. - Object클래스에는 11개의 메소드가 정의되어 있는데 클래스는 자동으로 상속받기 때문에 모든 클래스 또한 11개의 메소드를 상속받는다.
1
2
3
4
class Fruit (extends Object) { }
// 상속을 받아도 어차피 최고 부모는 Object
class Apple extends Fruit {}
메소드 종류
Object 클래스의 메서드 | 설명 |
---|---|
protected Object clone( ) | 객체 자신의 복사본을 반환 |
public boolean equals(Object obj) | 객체 자신과 객체 obj가 같은 객체인지 알려준다. (같으면 true, 다르면 false) |
protected void finalize( ) | 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출된다. 데이터들은 객체가 소멸되기 직전에 반납 |
public Class getClass( ) | 객체 자신의 클래스 정보를 담고있는 Class 인스턴스를 반환 |
public int hashCode( ) | 객체 자신의 해시코드를 반환 |
public String toString( ) | 객체 자신의 정보를 문자열로 반환 |
public void notify( ) | 객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨운다. |
public void notifyAll( ) | 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다. |
public void wait( ) public void wait(long timout) public void wait(long timeout, int nanos) | 다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 한다.(timeout은 1/1000초, nanos는 1/(10^9)초) |
toString()
- 많이 쓰게 될 메소드이다. (자바 공부 시작한 지 얼마 안 돼서도 충분히 많이 사용 중이다.)
toString()
메소드는 해당 인스턴스에 대한 정보와 주소를 문자열로 반환한다.Object@4d46ca6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Player {
String nickname;
public Player(String nickname) {
this.nickname = nickname;
}
public String toString() {
return String.format("플레이어 - %s", nickname);
}
}
public class Main {
public static void main(String[] args) {
Player p = new Player("닉네임");
// p객체 출력 시 닉네임이 출력
System.out.println(p); // 플레이어 - 닉네임
}
}
equals(Object obj)와 hashCode()
- 두 메소드는 많이 사용하고 연관되어있기에 묶었다.
equals(Object obj)
- 객체 자신(this)과 주어진 객체(obj)를 출력.
- 같으면
true
/ 다르면false
- 같으면
- Object 클래스의 equals()는 객체의 주소를 비교한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Person {
private String name;
private int age;
// 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// equals 메서드 재정의
@Override // 오버라이딩
public boolean equals(Object obj) {
// 자기 자신과 비교할 경우 항상 true
if (this == obj) {
return true;
}
// obj가 null이거나, 다른 클래스의 인스턴스이면 false
if (obj == null || getClass() != obj.getClass()) {
return false;
}
// obj를 Person 타입으로 캐스팅
Person person = (Person) obj;
// name과 age를 기준 같은지 비교
return age == person.age && name.equals(person.name);
}
}
public class Main {
public static void main(String[] args) {
Person person1 = new Person("김자바", 30);
Person person2 = new Person("김자바", 30);
Person person3 = new Person("파이썬", 25);
System.out.println(person1.equals(person2)); // true
System.out.println(person1.equals(person3)); // false
}
}
hashCode()
- 객체의 해쉬코드를 반환하는 메소드
- 객체의 주소를
int
로 변환해서 반환 - 만약
equals()
를 오버라이딩하면,hashCode()
도 오버라이딩 해야 된다.equals()
의 결과가true
인 두 객체의 해쉬코드는 같아야 하기 때문이다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.