포스트

[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 라이센스를 따릅니다.