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;
}
}
'Java' 카테고리의 다른 글
[Java] 제너릭스 (0) | 2023.02.27 |
---|---|
[Java] 자동형변환과 수동형변환 (0) | 2023.02.27 |
[Java] String 메서드 정리 (0) | 2023.02.24 |
[Java] 예외처리 (try ~ catch) (0) | 2023.02.24 |
[Java] 접근제한자(private) (0) | 2023.02.24 |