728x90
equals는 일반 규약을 지켜 재정의하기
- equals를 overriding하지 않는 경우
- 각 인스턴스가 본질적으로 고유함
- 인스턴스의 논리적 동치성 검사 불필요
- 상위 클래스의 equals가 하위 클래스에도 잘 맞음
- 클래스가 private이거나, package-private이어서 equals 호출 안함
- equals를 overriding해야 하는 경우
논리적 동치성
을 확인해야 하는 경우
- equals 동치관계 구현 조건
반사성
: 객체는 자기 자신과 같아야 함대칭성
: 두 객체는 서로에 대한 동치 여부에 동일한 답을 해야 함추이성
: 첫번째 == 두번째 == 세번째일관성
: 두 객체가 같다면 영원히 같아야 함Non-null
: 모든 객체가null
과 같지 않아야 함
- equals 구현 방법
==
로 입력이 자기 자신의 참조인지 확인instaneof
로 입력이 올바른 타입인지 확인- 입력을 올바른 타입으로
casting
- 핵심 필드들이 모두 일치하는지 하나씩 검사
- equals를 overriding할 때
hashCode
도 반드시 overriding Object
외의 타입을 매개변수로 받는 equals는 선언하지 않기
equals를 재정의하면 hashCode도 재정의하기
equals
를 overriding한 클래스는hashCode
도 overriding 해야 함- 논리적으로 같은 객체는 같은 해시코드를 반환해야 함
- 성능을 높이기 위해서 hashCode 구하는 데 핵심 필드를 생략하면 안됨
toString을 항상 재정의하기
- toString은 간결하면서 사림이 읽기 쉬운 형태로 유익한 정보를 반환해야 함
- toString을 잘 구현하면 디버깅이 쉬워짐
- toString은 객체가 가진 주요 정보를 모두 반환해야 함
clone 재정의는 주의하기
cloneable
을 구현한 클래스의 인스턴스는clone
을 호출하면 필드를 모두 복사한 객체를 반환함cloneable
을 구현하지 않은 클래스에서 호출하면CloneNotSupportedException
- clone은 생성자와 같은 효과를 냄
- 원본 객체에 영향을 주지 않고, 복제된 객체의 불변식을 보장해야 함
- cloneable은 가변 객체를 참조하는 필드는 final로 선언하라는 일반 규칙과 충돌함
public
인 clone 메서드에서는throw
절을 제거해야 함- 그래야 사용하기 편함
- cloneable을 구현하지 않은 클래스를 확장할 때에는
복사 생성자
와복사 팩터리
가 더 나은 방법
Comparable을 구현할지 고려하기
- Comparable을 구현한 것은 인스턴스에
자연적인 순서
가 있다는 의미 Wrapper
클래스에서는<
,>
보다는compare
메서드를 추천
참고자료
'ReadingBooks' 카테고리의 다른 글
[Effective Java] 객체 생성과 파괴 (0) | 2021.07.27 |
---|