일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바 필터
- open-session-in-view
- 비기능적 요구사항
- 기능적 요구사항
- 동적파라미터
- kotlin 리팩터링
- 스프링 포매터
- 토비의 스프링
- ioc컨테이너
- 도커 이미지 빌드
- spring formatter
- 그래프큐엘
- java predicate
- Atomicity
- method refetence
- 소프트웨어의 품격
- Spring
- fetch join
- 스프링di
- jpa no session
- 정적팩토리메서드
- IOC
- 스프링
- kotlin ::
- 스프링부트 도커
- 생성자주입
- 스프링시큐리티
- jpa lazy
- 수정자주입
- 스프링 시큐리티 설정
Archives
- Today
- Total
공부기록
아이템 10. equals는 일반 규약을 지켜 재정의하라 본문
반응형
equals를 재정의 하지 않아도 되는 경우.
각 인스턴스가 본질적으로 고유하다.
- 예를 들어
Thread
처럼 값을 표현하는 게 아닌, 동작하는 개체를 표현하는 클래스
- 예를 들어
인스턴스의 논리적 동치성을 검사할 일이 없다
상위 클래스에서 재정의한
equals
가 하위 클래스에도 딱 들어맞는다.- 예를들어
Set
구현체는AbstractSet
이 구현한equals
를 상속받아 쓴다.
- 예를들어
클래스가
private
이거나default
이고equals
메서드를 호출할 일이 없다.equals
를 호출하는 걸 막으려면 다음과 같이 구현하자.@Override public boolean equals(Object o) { throw new AssertionError(); }
equals를 재정의 해야하는 경우
- 논리적 동치성을 확인해야하는데 상위 클래스의
equals
가 논리적 동치성을 비교하도록 재정의되지 않았을 때.- 주로 Integer와 String처럼 값을 표현하는 클래스가 여기에 해당.
equals 메서드의 일반 규약
- equals 메서드는 동치관계를 구현하며, 다음을 만족한다
- 반사성 : null이 아닌 모든 참조 값 x에 대해 x.equals(x)는 true다.
- 대칭성 : null이 아닌 모든 참조 값 x,y에 대해 x.equals(y)가 true면 y.equals(x) 또한 true다
- 추이성 : null이 아닌 모든 참조 값 x,y,z에 대해 x.equals(y)가 true이고, y.equals(z)가 true면 x.equals(z) 또한 true다.
- 일관성 : null이 아닌 모든 참조 값 x,y에 대해 x.equals(y)를 반복해서 호출하면 항상 true 이거나 항상 false여야한다.
- null 아님 : null이 아닌 모든 참조 값 x에 대해, x.equals(null)은 false다.
equals 메서드 단계별 구현 방법.
- == 연산자를 사용해 입력이 자기 자신의 참조인지 확인한다.
- instanceof 연산자로 입력이 올바른 타입인지 확인한다.
- 입력을 올바른 타입으로 형변환한다.
- 입력객체와 자기 자신의 대응되는 핵심 필드들이 모두 일치하는 지 하나 씩 검사한다.
정리.
- 꼭 필요한 경우가 아니면 equals를 재정의하지 말것. 구현한다면 다섯가지 규약을 확실히 지켜가며 핵심 필드들을 비교해야한다.
반응형
'JAVA' 카테고리의 다른 글
아이템12. toString을 항상 재정의하라 (0) | 2019.12.01 |
---|---|
아이템11. equals를 재정의하려거든 hashCode도 재정의하라. (0) | 2019.11.30 |
아이템9. try-finally보다는 try-with-resources를 사용하라. (0) | 2019.11.29 |
아이템7. 다 쓴 객체 참조를 해제하라 (0) | 2019.11.29 |
아이템6. 불필요한 객체 생성을 피하라. (0) | 2019.11.27 |