Java

[Java] Object 클래스와 메서드

jny0 2023. 2. 27. 14:32

Object 클래스는 모든 클래스의 최상위 클래스로 모든 클래스는 기본적으로 Object 클래스를 상속받는다.

따라서 모든 클래스는 Object 클래스의 메서드를 오버라이딩해서 사용할 수 있다.

 

 

1. 객체 문자 정보 toString()

toString()은 객체를 문자열로 표현한 값을 반환한다.

기본적으로 클래스명@16진수해시코드로 이루어진 문자 정보이다.

클래스에서 toString()을 오버라이딩하여 사용할 수 있다.

Car car01 = new Car();
Car car02 = new Car();

System.out.println(car01.toString()); // 실행결과  : Car@15db9742
System.out.println(car02.toString()); // 실행결과  : Car@6d06d69c
class Main {
    public static void main(String[] args) {
        사람 a사람1 = new 사람("홍길동", 22);    // 결과 : 사람 [이름=홍길동, 나이=22]
        사람 a사람2 = new 사람("홍길순", 23);    // 결과 : 사람 [이름=홍길순, 나이=23]
        System.out.println(a사람1);
        System.out.println(a사람2);
    }
}
class 사람 extends Object {
    String 이름;
    int 나이;
    사람(String 이름, int 나이) {
        this.이름 = 이름;
        this.나이 = 나이;
    }

    @Override
    public String toString() {
        return "사람[이름=" + 이름 + ",나이=" + 나이 + "]";
    }
}

 

 

2. 객체 비교 equals()

두 개의 객체가 같은지 비교한다

  • public boolean equals(Object obj) { . . . }의 형태로 매개변수는 객체이고 true/false를 리턴한다
  • 논리적으로 동등하다는 의미 : 같은 객체이건 다른 객체이건 상관없이 저장하고 있는 데이터가 동일함

 

equals() 메서드를 오버라이딩 할 때, 매개값(비교 객체)이 기준 객체와 동일한 타입의 객체인지 먼저 확인해야 한다.

Object 타입의 매개 변수는 모든 객체가 매개값으로 제공될 수 있기 때문에 instanceof 연산자로 기준 객체와 동일한 타입인지 제일 먼저 확인해야 한다.

만약 비교 객체가 다른 타입이라면 equals() 메서드는 false를 리턴해야 한다.

비교 객체가 동일한 타입이라면 기준 객체 타입으로 강제 타입 변환해서 필드 값이 동일한지 검사한다.

 

// Object 클래스와 equals

class Main {
    public static void main(String[] args) {
        사람 a사람1 = new 사람("홍길동", 22);
        사람 a사람2 = new 사람("홍길동", 22);

        if ( a사람1.equals("ㅋㅋ") )
        {
            System.out.println("참");
        }else { 
            System.out.println("거짓");
        }

        if ( a사람1.equals(a사람2) )
        {
            System.out.println("참1");
        }
    }
}

class 사람 {
    String 이름;
    int 나이;
    사람(String 이름, int 나이) {
        this.이름 = 이름;
        this.나이 = 나이;
    }

    @Override
    public boolean equals(Object o) {
        if ( o instanceof 사람 == false ) {	// 기준 객체와 같은 타입인지 비교

            return false;
        }

        사람 other = (사람)o; // 기준 객체로 강제 형변환

        if ( !이름.equals(other.이름) ) {
            return false;
        }

        if ( this.나이 != other.나이 ) {
            return false;
        }

        return true;
    }
}