-
이펙티브 자바 [3] 모든 객체의 공통 메서드카테고리 없음 2023. 1. 24. 16:58
equals는 일반 규약을 지켜 재정의 하라 (아이템 10)
재정의가 필요한 경우 EqualsBuilder , @EqualsAndHashCode 사용
- EqualsBuilder 외 HashCodeBuilder, ToStringBuilder, CompareToBuilder 등이 있어 해당 리플렉션 API를 이용하여 재정의 가능 org.apache.commons.lang3.builder
- @EqaulsAndHashCode 롬복 어노테이션의 경우 두 해쉬값이 같은지를 확인하는 hashcode(), 두 객체가 동일한지 확인하는 equals() 이다.
equals를 재정의하려거든 hashCode도 재정의 해라 (아이템 11)
마찬가지로 재정의가 필요한 경우 EqualsBuilder , @EqualsAndHashCode 사용
toString을 항상 재정의 해라 (아이템 12)
재정의 해서 사용하자 주로 롬복을 사용한다면 @ToString 권장
clone 재정의는 주의해서 진행하라 (아이템 13)
Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 인터페이스다. 그리고 clone 메서드는 Object에 정의되어 있고 Protected 이다. Cloneable 인터페이스는 메서드 하나 없지만 clone의 동작 방식을 결정한다. Cloneable을 구현한 클래스의 인스턴스에서 clone을 호출하면 객체의 필드들을 하나하나 복사한 객체를 반환하며, 그렇지 않은 클래스의 인스턴스에서 호출하면 CloneNotSupportedException을 발생한다.
Clone은 수많은 단점이 존재하며, 명세자체가 허술하여 개발자가 제대로 만드냐에 따라 차이가 극심하다. 그렇기에 사실상 Clone을 사용해야 한다면 Clone을 사용하기 보다는 복사 생성자와 복사 팩토리를 사용해라
Comparable을 구현할지 고려해라 (아이템 14)
마찬가지로 CompareToBuilder 를 권장