모든 Java의 클래스는 Object클래스의 상속을 받는다. Object클래스가 상속하는 Method중에 가장 많이 사용되고 Overriding되는 Method는 equals와 toString이다.
1) toString은 객체의 정보를 나타내는 메서드
- 객체가 null일 때는 null을 반환한다.
- Object에 구현된 내용은 [패키지+클래스이름+@+16진수]로 구성된 hashcode를 반환한다.
- System.out.println(객체): 이 때 보여지는 정보는 원래 참조값이지만, 내가 원하는 목적의 정보를 보여지게 하는데 종종 사용된다.
- String클래스는 문자열 내용이 중요하므로 이미 Overriding되어 객체정보가 아니라 문자열 내용을 반환한다.
2) equals와 ==는 동일하다. 객체의 참조값(hashcode)가 같은 지 다른 지를 판단하여 boolean으로 반환한다.(힙의 같은 공간에 할당된 객체인가를 비교)
- ==은 항상 객체의 참조값을 비교한다. Java의 문자열은 ==을 쓰면 문자열 내용 비교를 할 수 없다.
3) 우리가 내용이 비교하고 싶은 값을 비교해서 판단하고자 하면 equals를 Overriding해서 사용한다.
- String클래스는 이미 문자열을 비교하도록 Overriding되어 있다.
- 다른 클래스도 String클래스처럼 비교하고 싶은 내용으로 Overrding하면 된다.
ex1)
public class Ball {
private float rad;
public Ball(float rad) {
this.rad = rad;
}
public String showBall() {
return "이 공의 반지름은 " + rad;
}
public boolean isEqual(Ball ball) {
return this.rad == ball.rad;
}
public static void main(String[] args) {
Ball ball1 = new Ball(30);
Ball ball2 = new Ball(30);
System.out.println(ball1.showBall());
System.out.println(ball2.showBall());
System.out.println(ball1.isEqual(ball2));
System.out.println(ball1.toString());
System.out.println(ball2.toString());
System.out.println(ball1 == ball2);
System.out.println(ball1.equals(ball2));
}
}
출력
이 공의 반지름은 30.0
이 공의 반지름은 30.0
true
edu.exam08.tostring01.Ball@15db9742
edu.exam08.tostring01.Ball@6d06d69c
false
false
ex2)
public class Ball {
private float rad;
public Ball(float rad) {
this.rad = rad;
}
// 객체의 정보를 보여줄 때 Overriding하라고 상속해준 메서드
public String toString() {
return "이 공의 반지름은 " + rad;
}
// 객체내의 정보가 같은 지 여부를 판단 할 때 Overriding하라고
// 상속해준 메서드
public boolean equals(Object obj) {
return this.rad == ((Ball)obj).rad;
}
public static void main(String[] args) {
Ball ball1 = new Ball(30);
Ball ball2 = new Ball(30);
System.out.println(ball1); // ball1.toString();
System.out.println(ball2); // ball2.toString();
System.out.println(ball1 == ball2);
System.out.println(ball1.equals(ball2));
}
}
출력
이 공의 반지름은 30.0
이 공의 반지름은 30.0
false
true
ex3)
public class Friend {
protected String name;
protected String phoneNum;
protected String addr;
public Friend(String name, String phone, String addr) {
this.name = name;
this.phoneNum = phone;
this.addr = addr;
}
public String toString() {
return "이름: " + name + "\n" +
"전화: " + phoneNum + "\n" +
"주소: " + addr + "\n";
}
public boolean equals(Object obj) {
Friend fr = (Friend)obj;
return this.name.equals(fr.name) &&
this.phoneNum.equals(fr.phoneNum) &&
this.addr.equals(fr.addr);
}
public static void main(String[] args) {
Friend fr0 = new Friend("홍길동", "111", "지리산");
Friend fr1 = new Friend("홍길동", "111", "지리산");
Friend fr2 = new Friend("홍길동", "222", "지리산");
System.out.println(fr0);
System.out.println(fr1);
System.out.println(fr2);
System.out.println(fr0.equals(fr1));
System.out.println(fr0.equals(fr2));
}
}
출력
이름: 홍길동
전화: 111
주소: 지리산
이름: 홍길동
전화: 111
주소: 지리산
이름: 홍길동
전화: 222
주소: 지리산
true
false
'java' 카테고리의 다른 글
Java/ MVC패턴과 추상클래스를 이용한 사원 관리 프로그램 (0) | 2020.02.10 |
---|---|
Java/ MVC패턴과 추상클래스를 이용한 연락처 관리 프로그램 (0) | 2020.02.10 |
Java/ 상속 (0) | 2020.02.10 |
Java/ String의 개념과 비교 (0) | 2020.02.10 |
Java/ Static의 개념과 응용 (0) | 2020.02.10 |