[Java 05] 객체 비교 - equals(), Comparable

 equals()

- Object class에 정의된 메서드

- 두 객체의 메모리 주소를 비교

 

Object one = "hello world";
Object two = "hello world";

// 객체 비교
if(one.equals(two))
	System.out.println("they are the same");

one, two 객체의 메모리 주소는 다르기 때문에 일치하지 않음.

 

 

 ✔️ 문자열 비교 시 메모리 주소를 비교하지 않음.

        → String의 equals는 Object class의 equals를 오버라이드(재정의) 한 것.

        → 따라서 아래 코드에서 equals는 Object class의 equals가 아니다.

String one = "hello world";
String two = "hello world";

// 문자열 비교
if(one.equals(two)){
	System.out.println("they ar the same");
}

→ 위 one, two 문자열은 문자열 자체를 비교하는 것이므로 일치함.

 

 

※ Student, Person과 같이 특정 class에서 Object class의 equals method를 오버라이드(재정의) 하지 않은 경우

  → Object class의 equals를 사용하게 된다.

 

 

 

Comparable Interface

- 객체에서 원하는 자료형으로 비교하기 위해 사용하는 인터페이스

- 같은 자료형다른 객체 하나를 인자로 받아와 비교하는 compareTo method를 사용

 

 

✔️  compareTo 메서드

- 같은 자료형의 두 데이터를 비교할 수 있는 메서드

- Comparable 인터페이스에 있는 유일한 메서드

- Comparable 인터페이스를 구현(implements) 하기 위해서는 compareTo 메서드만 있으면 됨.

Interface Comparable<T> {

	public int compareTo(T obj) {

	}

}

 

a.compareTo(b)

// 1
if(a < b) return < 0

// 2
if(a == b) return 0

// 3
if(a > b) return > 0

1. a가 b보다 작은 경우 → 0보다 작은 수 반환

2. a와 b가 같은 경우 → 0 반환

3. a가 b보다 큰 경우 → 0보다 큰 수 반환

 

-  이제 여러 문자열을 정렬하거나 두 문자열이 같은지 알고 싶을 때 compareTo 메서드를 호출하면 됨.

 

if(((Comparable<T>) data).compareTo(obj) == 0) // then ar the same

→ 여기서 T는 Type를 의미

  • 위 코드는 Comparable로 형변환 해준 것이기 때문에 compareTo를 호출하면 Comparable에 있는 compareTo를 호출한 것이다.
  • data와 obj는 같은 타입이기 때문에 compareTo를 사용할 수 있다.

 

 


 ✔️ 참고

 

자바로 구현하고 배우는 자료구조

부스트코스 무료 강의

www.boostcourse.org