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 ) 구문을 통해 애초에 사람 클래스가 아니면 입구컷을 해버리는 것.