CS지식/자료구조

TIL 정리_56

ran4 2022. 4. 12. 23:48

자료구조  : 자바 
 

comparable 인터페이스/오버라이드
String one = "hello world";
String two = "hello world";
if(one.equals(two)) {
System.out.println("they are the same");

위의 코드에서 equals 메서드가 어디서 왔는가?
-> 문자열에서 왔다
-> 정확히는 객체의 equals 메서드를 오버라이드 했다 (원래의 메서드 오버라이드)

Object o = one; //형변환
Object t = two;
if(o.equals(t)) 
객체를 비교할 때는 메모리 주소를 비교하고 
문자열 클래스를 비교할 때는 메모리 주소를 비교하지 않는다


객체(원숭이)가 같은지 비교 
Monkey m = new Monkey();
Monkey n = new Monkey();
if(m.equals(n)) 
객체의 equals 메서드는 문자열의equals와 다르다 

객체 클래스의 equals는 메모리 주소를 비교하지만,

문자열 클래스의 equals를 오버라이드하면 메모리 주소 대신 문자열을 비교하게 만들 수 있다.

->이 equals 메서드를 보고 Monkey 클래스가 equals 메서드를
오버라이드 했는지 알 수 없다
-> 다른 사람이 이 자료구조를 이용할 때 문제가 발생

어떤 과정을 통해서 equals 메서드를 무조건 오버라이드 하도록 하거나 
우리가 사용할 메서드를 무조건 오버라이드 하도록 해야 한다 
-> 비교하는 과정을 확장할 수 있다

 


comparable 인터페이스 
객체 클래스의 equals 메서드 외에도 두 가지가 같은지 알려주는 메서드이다 

comparable<T> interface

 


정수를 반환하는 공개 메서드 compareTo는


public int compareTo(t obj) 
a.compareTo(b) 
if(a<b) return <0
if( a == b) return 0
if(a>b) return >0 

의 규칙을 따른다

따라서 객체를 비교하고 싶을 때 
comparable 인터페이스와 compareTo 메서드를 활용하여 
어떤 객체를 넣고 어느 상황이든
상황에 따라 0보다 작거나 큰 수 혹은 0을 반환해주면 된다

 

 

compareTo 메서드의 다른 기능들 

  • 객체와 객체 비교 
  • 문자열 문자열 비교
  • 여러 문자열 정렬 

 

**자료구조를 설계할 때는 정렬은 중요하지 않지만
compareTo 메서드가 규칙에 맞는 작업을 해준다는 사실을 기억하면 좋다

 


정리  

  • 데이터가 있다면 compareTo 메서드에 넣으면 된다
  • 자료구조에서는 이 데이터를 받고 이를 이용해 comparable의 compareTo 메서드에 전달한다 
    -> 둘을 비교하여 둘이 같은지 다른지 알 수 있다 

 

if(((Comparable<T>) data) //형변환// .compareTo(obj) == o) -> 동일하다 
이 코드의 의미 compareTo 메서드를 호출하게 되면 
이 comparTo 메서드는 comparable에 들어있는 메서드가 된다

데이터를 가져와서 comparable로 형변환을 하고 compareTo를 호출한다
호출된 compareTo에 data와 같은 형식의 객체를 인자로 넣어준다
상황에 따라 다르게 반환이 될 것이다
-> 연결리스트에서 이것을 활용하게 된다 


'CS지식 > 자료구조' 카테고리의 다른 글

TIL 정리_58  (0) 2022.04.14
TIL 정리_57  (0) 2022.04.13
TIL 정리_51(Queue)  (0) 2022.04.07
TIL 정리_50(Stack)  (0) 2022.04.06
TIL 정리_49(StringBuilder)  (0) 2022.04.05