2023. 11. 22. 00:23ㆍBook/이펙티브 자바
적절한 eqauls 메서드 구현 방법
1. == 연산자를 사용해 입력이 자기 자신의 참조인지 확인한다. (반사성)
=> 단순한 성능 최적화용으로, 비교 작업이 복잡한 상황일 때 값어치를 한다.
2. instanceof 연산자로 입력이 올바른 타입인지 확인한다.
=> 보통은 자신의 클래스가 아니라면 false를 리턴하지만, 가끔은 그 클래스가 구현한 특정 인터페이스가 될 수도 있다.
3. 입력을 올바른 타입으로 형변환한다.
=> 2번을 통과했으니 당연히 된다.
4. 입력 객체와 자기 자신의 대응되는 '핵심' 필드들이 모두 일치하는지 하나식 검사한다.
=> 필요 없는 필드는 검사x
기본 타입 비교 : ==
=> float, double 제외
=> float와 double은 각각 정적 메서드인 Float.compare(float, float)와 Double.compare(double, double)로 비교
=> Float.equlas와 Double.eqauls로 비교 할 수는 있지만 오토박싱이 수반되므로 성능상 좋지 않음
참조 타입 비교 : equals
=> null도 정강 값으로 취급 하는 경우 : Objects.eqauls(Objects, Objects)
*주의 사항
- equals 메서드를 재정의 할 때 hashCode도 반드시 재정의하자
- 너무 복잡하게 해결하지 말자
- Object가 아닌 타입의 매개변수를 받는 eqauls 메서드는 선언하지 말자(의미 없는 equals가 될 수 있다.)
'Book > 이펙티브 자바' 카테고리의 다른 글
Item11 - equals를 재정의하려거든 hashCode도 재정의하라(2) (3) | 2023.11.22 |
---|---|
Item11 - equals를 재정의하려거든 hashCode도 재정의하라 (0) | 2023.11.22 |
Item10 - equals는 일반 규약을 지켜 재정의하라(3) (1) | 2023.11.21 |
Item10 - equals는 일반 규약을 지켜 재정의하라(2) (1) | 2023.11.21 |
Item10 - equals는 일반 규약을 지켜 재정의하라(1) (1) | 2023.11.20 |