Object클래스는 java.lang패키지의 클래스이고, 뒤에 s가 하나 더 붙는 Objects클래스는 java.util패키지의 클래스이다.
객채비교, 해시코드생성, null여부, 객체 문자열 리턴등 연산을 수행하는 정적 메소드들로 구성된 유틸리티 클래스이다.
이것만 보면 lang패키지의 Object클래스와 무엇이 다른지 모르겠다는 생각이 들었다.
객체비교, 해시코드생성, null여부, 객체 문자열 리턴 등의 연산 기능은 Object클래스에도 있기 때문이다.
하지만 Object클래스는 자바의 모든 클래스가 상속하는 부모클래스를 말하고, Objects 클래스는 Java 7에서 추가된 유틸리티 클래스이다. Objects클래스는 유틸리티 클래스기에 static = 정적 메소드로 구성된다..
위 표처럼 Objects클래스에는 매개변수를 가지는 정적메소드들이 있다.
사용할때는 Objects.메소드명 식으로 사용하면 된다.
- comapre(T a, T b, Comparator c))
Objects클래스의 대표적인 메소드이다. 매개값으로 받은 객체를 비교자로 비교해서 int값을 리턴한다.
java.util.Comparator<T>는 제네릭 인터페이스 타입으로 두 객체를 비교하는 compare( T a, T b)메소드가 정의되어 있다.
compare()메소드의 리턴타입은 int인데, a가 b보다 작으면 음수, 같으면 0, 크면 양수를 리턴하도록 구현클래스를 생성해야 한다.
아래는 Comparator인터페이스이고,
public interface Comparator<T> {
int compared a, T b);
}
그리고 이 형식을 토대로 Comparator의 구현클래스를 만들어보면,
Class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student a, Student b) {
if(a.sno < b.sno) return -1;
else if(a.sno == b.sno) return 0;
else return 1;
}
//4행부터 6열까지 이코드로 대체할 수 있다.
//return Integer.compare(a.sno, b.sno);
}
이런식으로 구현할 수 있다. ( 4행부터 6열의 코드는 return Integer.compare(a.sno, b.sno) <- 이 한줄과 같은 코드이다)
이 구현클래스를 사용해보면,
....
Student s1 = new Student(1);
Student s2 = new Student(1);
Student s3 = new Student(2);
int result = Objects.compare(s1, s2, new StudentComparator());
System.out.println(result);
result = Objects.compare(s1, s3, new StudentComparator());
System.out.println(result);
static class Student{
int sno;
Student(int sno) {
this.sno = sno;
}
}
Class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student a, Student b) {
/*if(a.sno < b.sno) return -1;
else if(a.sno == b.sno) return 0;
else return 1;*/
return Integer.compare(a.sno, b.sno);
}
}
}
결과
0
-1
'Language > JAVA' 카테고리의 다른 글
StringTokenizer 클래스 (0) | 2023.07.07 |
---|---|
API_3. String 클래스 (0) | 2023.07.06 |
API_1. Object 클래스와 메소드 (0) | 2023.07.06 |
JAVA API 클래스 - 1 (0) | 2023.07.06 |
MVC 모델 2 게시판 만들기 - 1 (0) | 2022.11.01 |