티스토리 뷰

자바의 Object 클래스란 ? 자바 API의 모든 클래스와 사용자가 정의한 모든 클래스의 최상위 클래스이다.

즉, 모든 자바 클래스들은 Object 클래스를 상속받는다. 



ex ) class A extends B

A클래스는 B클래스를 상속받았으며, Object 클래스도 묵시적으로 상속받았다고 볼 수 있다.



* Object 클래스의 주요메소드

메소드

용도

boolean equals(object obj)


두 개의 객체가 같은지 비교한다. 반환형은 boolean (true, false) 


String toString()


현재 객체의 문자열을 반환한다. 

(오버라이딩을 사용하여 현재 객체의 초기화된 멤버변수를 알 수 있다.)


Object clone()


객체를 복사한다.


Class getClass()


객체의 클래스형을 반환한다.

 


void finalize()


가비지 컬렉션 (GC) 직전에 객체의 리소스를 정리할 때 호출한다.


int hashCode()


객체의 해쉬코드값을 반환한다.


Object 클래스에 해당하는 메소드는 더 많습니다. 


이 외의 자세한 정보는 API를 확인 하시면 됩니다.  Java Object API



이론을 배웠으면 실습을 통해 공부하겠습니다.



Object 클래스를 상속받은 toString(), 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
42
43
44
45
46
47
48
public class ExampleObject{
    public static void main(String[] args) {
        // 1) toString
        // 2) equals
 
        A a1 = new A(10);
        A a2 = new A(10); // a1을 대입할 경우 아래 if 문에서 true
 
        String str = a1.toString();
 
        System.out.println(a1);
        System.out.println(str);
 
        // A == B -> A와 B가 같은가? -> A의 값과 B의 값이 같은가?
        if (a1 == a2) {
            System.out.println("a1과 a2가 같다.");
        } else if (a1.equals(a2)) {
            System.out.println("equals");
        } else {
            System.out.println("a1과 a2가 다르다.");
        }
 
        Person p1 = new Person("A", 25, "0313");
        Person p2 = new Person("A", 25, "0313");
 
        // 동등 연산자 (==) 사용
        if (p1 == p2) {
            System.out.println("같은 사람");
        } else {
            System.out.println("다른 사람");
        }
 
        // Object 클래스의 equals 사용
        // p1을 기준으로 p2를 비교하겠다.
        // p2.equals(p1) => p2를 기준으로 p1을 비교
 
        // Object 클래스에서는 기본적으로 equals 메소드를 동등 연산자와 동일하게 사용한다.
        // -> 메모리 주소값 비교
 
        // Overring을 사용하여 메소드 재정의를 통해 멤버변수 값을 비교하여 같은 사람이 된다.
        if (p1.equals(p2)) {
            System.out.println("같은 사람");
        } else {
            System.out.println("다른 사람");
        }
 
    }
}



Object 클래스로부터 상속받은 toString() 메소드를 오버라이딩한 A 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class A { // object클래스를 상속받고 있다.
    private int num;
 
    // public A(){
    // System.out.println("A() 생성");
    // }
    public A(int num) {
        this.num = num;
    }
 
    @Override
    public String toString() {
        String str = super.toString();
        return "A [num=" + num + "]"+str;
    }
}



A클래스를 상속받은 B클래스

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
public class B extends A {
    private int num2;
 
    // public B(){
    // System.out.println("B() 생성");
    // }
    // 부모클래스의 생성자에 매개변수가 있으면
    // 자식클래스에서 부모클래스의 매개변수까지
    // 받아내어 명시적으로 부모클래스의 인스턴스를
    // 만들어 내야한다.
    public B(int num1, int num2) {
        // super()위에 어떠한 코드가 들어가게 되면 자식클래스 생성자가 먼저 생성되어야 하므로 Error발생!
 
        // super 키워드 위에 코드가 존재한다는 이야기는
        // 부모클래스가 만들어지지도 않았는데 자식 클래스에서
        // 무엇인가를 진행한다는 이야기이다. 따라서 suer키워드 위쪽 코드에는
        // 어떠한 코드도 들어갈 수 없다.
 
        // 부모클래스의 생성자에 매개변수가 없다면 super키워드를 사용하지 않아도 된다.
         
        // System.out.println("Hello");
        super(num1); // 부모클래스의 생성자 호출
    }
 
    public void goo() {
        // A a= super(10); // B 클래스입장에서 기반으로 하는 클래스를 만드는 것.
        // A a1 = new A(10); // 새로운 객체를 만드는 것
    }
}



Object 클래스를 상속받아 toString() , equals() 메소드를 오버라이딩한 Person 클래스

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
public class Person {
    private String name;
    private int age;
    private String birthday;
 
    public Person(String name, int age, String birthday) {
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }
 
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
    }
 
    @Override
    public boolean equals(Object obj) {
        Person temp = (Person) obj;
        boolean equals_condition = (this.age == temp.age) && (this.name.equals(temp.name))
                && (this.birthday == temp.birthday);
 
        return equals_condition;
    }
}
반응형
LIST
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
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
글 보관함