Object에서 final이 아닌 메소드(equals, hashCode, toString, clone, finalize)는 모두 재정의를 염두에 두고 설계되었다. 이 메소드들을 잘못 구현하면 대상 클래스가 일반적인 규약을 준수한다고 가정하고 만들어진 클래스(HashMap, HashSet 등)에서 오동작이 일어날 수 있다.
equals는 일반 규약을 지켜 재정의하라
equals 는 일반 규약을 지켜 재정의 해야한다.
재정의 하지 않는 상황
- VO 가 아니라 일반 클래스인 경우
- VO 여도 두개 이상 만들어지지 않는 다는게 보장되는 상황, 싱글톤 등
재정의 하는 상황
- 논리적 동치성을 비교할 떄 사용하면 좋다 , 객체가 같은지가 중요한게 아니라 객체 안에 있는 값이 같은게 중요할때
equals를 재정의하려거든 hashCode도 재정의하라.
equals 가 두 객체를 같다고 판단 하면 두 객체의 hashCode 는 똑같은 값을 반환해야한다.
equals 가 두 객체를 다르다고 판단하면 hashCode 는 같아도 되지만 달라야 성능이 더 좋다
따라서 equals 를 재정의한 클래스에서는 hashCode 도 재정의 해야한다.
toString을 항상 재정의하라
toString 을 재정의 하면 디버깅이 쉬워지기도 한다.
toString 은 객체가 가지고 있는 모든 정보를 보여주는게 좋다
clone 재정의는 주의해서 진행하라
복제 기능은 복사 생성자나 복사 팩토리를 이용하는게 좋다
Comparable을 구현할지 고려하라
Comparable 의 인터페이스 메소드는 compateTo 밖에 없다.
sort 기능 구현시 사용한다
'Java > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바 - 7장 람다와 스트림 (0) | 2020.12.29 |
---|---|
이펙티브 자바 - 6장 열거타입과 애너테이션 (0) | 2020.12.24 |
이펙티브 자바 - 5장 제네릭 (0) | 2020.12.23 |
이펙티브 자바 - 4장 클래스와 인터페이스 (0) | 2020.12.21 |
이펙티브 자바 - 2장 객체 생성과 파괴 (0) | 2020.12.21 |