230227 - toString 오버라이드

ghltjd369·2023년 2월 27일
0
package org.example;

public class Main {
    public static void main(String[] args) {
    	사람 a사람1 = new 사람("홍길동", 22);
        사람 a사람2 = new 사람("홍길순", 23);
        System.out.println(a사람1);			//org.example.사람@3b07d329
        System.out.println(a사람2);			//org.example.사람@41629346
    }
}

class 사람 {
    String name;
    int age;

    사람(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

위 코드처럼 출력을 하게 되면 객체의 주소가 반환된다.
만약 저렇게 해서 객체의 이름을 출력하고 싶다면 Object 클래스의 toString 메서드를 오버라이드 하면 된다.

```java
package org.example;

public class Main {
    public static void main(String[] args) {
    	사람 a사람1 = new 사람("홍길동", 22);
        사람 a사람2 = new 사람("홍길순", 23);
        System.out.println(a사람1);			//홍길동
        System.out.println(a사람2);			//홍길순
    }
}

class 사람 {
    String name;
    int age;

    사람(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

마찬가지로 equals 메서드도 다양한 형태로 수정하여 사용할 수 있다.
예를 들면 name이 똑같으면 true를 반환한다던가, name과 age가 모두 같아야 반환한다던가.

public boolean equals(Object o) {
        // 사람인지 먼저 체크
    if ( o instanceof 사람 == false ) {
    	return false;
    }
        
    사람 other = (사람)o;
        
    if ( 이름.equals(other.이름) == false ) {
       return false;
    }
        
    if ( this.나이 != other.나이 ) {
        return false;
    }
        
    return true;
}

이 코드에서 유의할 점은 바로 1번줄과 3번줄
1번 줄에서 매개변수가 사람 클래스가 아닌 Object 인 것.
즉, 다른 타입도 들어올 수 있다는 뜻이다.
하지만 다른 타입이면 애초에 비교 자체가 안되니까
3번줄에서 if ( o instanceof 사람 == false ) 구문을 통해 애초에 사람 클래스가 아니면 입구컷을 해버리는 것.

0개의 댓글