티스토리 뷰
|
Comparable 인터페이스를 구현한 객체들은 자연적 순서를 갖게 된다.
아래의 코드는 String이 Comparable을 구현하고 있다는 사실을 이용하여 명령행 인자들을 알파벳 순서로 정렬하는 동시에 중복을 제거하고 있다.
Comparable을 구현한 클래스는 다양한 제네릭 알고리즘 및 Comparable 인터페이스를 이용하도록 작성된 컬렉션 구현체와도 전부 연동할 수 있다.
적은 노력으로도 엄청난 결실을 거둘 수 있는 것이다.
compareTo 메서드의 일반 규약은 equals와 비슷하다.
이 객체의 값이 인자로 주어진 객체보다 작으면 음수
이 객체의 값이 인자로 주어진 객체와 같다면 0
이 객체의 값이 인자로 주어진 객체보다 크다면 양수
비교할 수 없는 자료형이라면 ClassCastException 예외를 던진다.
sgn(expression)은 signum 함수로서 -1, 0, 1을 expressiong 에 따라서 반환한다.
1. sgn(x.compareTo(y)) == -(sgn(y.compareTo(x)) 를 성립.
2. 추이성이 만족되도록 해야 한다. x.compareTo(y) > 0 && y.compareTo(z) > 0 이면
x.compareTo(z) 이여야 한다.
3. x.compareTo(y) == 0 이면 sgn(x.compareTo(z)) == sgn(y.compareTo(z) 가 성립.
4.( x.compareTo(y)==0) == (x.equals(y)) 성립
위 규약을 지키지 않은 compareTo 를 가진 클래스는 비교 연산에 기반한 클래스들을 오작동시킬 수 있다. (TreeSet, TreeMap, sorted collection, Arrays, Collections...)
클래스에 선언된 중요 필드가 여러 개인 경우, 필드 비교 순서가 중요하다.
가장 중요한 필드부터 시작해서 차례로 비교해야 한다.
비교 결과가 0이 아닌 값이면 비교를 중단하고 결과를 반환한다.
'JAVA > Effective Java' 카테고리의 다른 글
규칙14 public 클래스 안에는 public 필드룰 두지 말고 접근자 메서드를 사용하라 (0) | 2018.12.19 |
---|---|
규칙13 클래스와 멤버의 접근 권한은 최소화 해라 (0) | 2018.12.19 |
규칙11 clone을 재정의할 때는 신중하라 (0) | 2018.12.19 |
규칙10 toString은 항상 재정의하라 (0) | 2018.12.19 |
규칙9 equals를 재정의할 때는 반드시 hashCode도 재정의해라 (0) | 2018.12.19 |
- Total
- Today
- Yesterday
- DyanomoDB
- Lazy
- RouteDefinition
- notifyAll()
- Seperate Chaining
- msyql-connector-java
- router
- reactor
- N+1
- aurora
- GlobalFilter
- AbstractMethodError
- MariaDB
- ResultSet
- ConcurrentHashMap
- custom config data convertion
- notify()
- dynamodb
- mariada-connector
- RoutePredication
- mariadb-connector-j
- wait()
- getBoolean
- referencedColumnName
- spring cloud gateway
- HashMap
- reative
- Flux
- rate limit
- circurit breaker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |