[JAVA] Object & Overriding

고민정·2024년 4월 5일

JAVA

목록 보기
20/32


🎇 Object

Object
모든 클래스의 최상위 클래스
아무것도 상속받지 않으면 자동으로 object 를 상속받기 때문
이 말은 object 가 갖고 있는 메서드는 모든 클래스에서 사용 가능

object 는 같은 값인지 다른 값인지 비교하는 메서드는 제공하고 있지만 오버라이딩해서 기준을 정하는 것은 사용자가 해야한다.

기준을 제공해주지 않으면 아래처럼 같은 값도 다르다고 나오기 때문이다.

import java.util.Objects;

public class ObjectOverriding {
    String name;
    String studentId;
    int birthYear;

    public static void main(String[] args) {
        ObjectOverriding student1 = new ObjectOverriding();
        student1.name = "Sara";
        student1.studentId = "102345";
        student1.birthYear = 2004;

        ObjectOverriding student2 = new ObjectOverriding();
        student2.name = "Sara";
        student2.studentId = "102345";
        student2.birthYear = 2004;

        if(student2.equals(student1)){
            System.out.println("TRUE");
        }
        else {
            System.out.println("FALSE");
        }
    }
}

실제로 student1 과 student2 의 이름, 학번, 출생 년도 모두 같지만 다르다고 나왔다.

이런 경우 기준을 정해주어야 한다.
어떤것이 같아야 같다고 반환할 것인지를 정해야 한다는 소리이다.

물론 이름만 비교할거면 student2.name.equals(student1.name) 해도 True 가 나온다.

코드를 작성하지 않아도 인텔리제이 기준 마우스 우클릭으로 해결 가능하다.
우클릭 > Generate > equals and HashCode 를 선택하면 된다.

선택하면 equals( ) 에서 어느것을 기준으로 할 것인지 체크하는 창이 나온다.
이름만 같으면 같다고 할 것인지, 이름과 학번 둘 다 같아야 같다고 할 것인지 본인 선택에 따라 체크해주면 된다.

체크 한 후에는 자동으로 오버라이딩한 코드가 생성된다.

나는 이름, 학번, 출생년도 모두 같아야 같은 학생이라고 선택했다.

import java.util.Objects;

public class ObjectOverriding {
    String name;
    String studentId;
    int birthYear;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ObjectOverriding that = (ObjectOverriding) o;
        return birthYear == that.birthYear && Objects.equals(name, that.name) && Objects.equals(studentId, that.studentId);
    }

    @Override
    public int hashCode() {
        return 0;
    }

    public static void main(String[] args) {
        ObjectOverriding student1 = new ObjectOverriding();
        student1.name = "Sara";
        student1.studentId = "102345";
        student1.birthYear = 2004;

        ObjectOverriding student2 = new ObjectOverriding();
        student2.name = "Sara";
        student2.studentId = "102345";
        student2.birthYear = 2004;

        if(student2.name.equals(student1.name)){
            System.out.println("TRUE");
        }
        else {
            System.out.println("FALSE");
        }
    }
}

이런 식으로 HachCode( ) 와 toString( ) 도 비교 가능하다.

* toString( ) 은 우클릭 > Generate > toString( )

0개의 댓글