일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Spring
- Aspect
- SQL
- 프로젝트 여러 개
- ojdbc6
- JavaScript
- Stream
- TypeScript
- MySQL
- Java
- Mac
- oracle
- svn
- DART
- 봤어요처리
- flutter mac 설치
- maven
- REST
- tecoble
- javascript error
- @RequestBody
- InteliJ
- class-transformer
- 코어자바스크립트
- datagrip 한글깨짐
- 인텔리제이
- 프로그래머스
- node.js
- db
- eqauls-hashcode
Archives
- Today
- Total
개발자가 되고 싶은 개발자
eqauls와 hashCode는 함께 재정의해야 하는 이유 (feat. 동일성과 동등성) 본문
Preface
- 동일성과 동등성은 객체를 비교할 때 중요한 개념입니다.
- Java에서는 equals() 메서드와 == 연산자를 통해 구분할 수 있습니다.
- Spring에서는 lombok의 @EqualsAndHashCode 어노테이션을 이용합니다.
equals() 메서드와 == 연산자의 차이
- 객체 비교 대상에서의 차이가 존재합니다.
- eqauls() 메소드는 객체의 내용을 비교하고, == 연산자는 객체의 참조를 비교합니다.
- 따라서 두 객체의 내용이 같더라도, 서로 다른 객체라면 eqauls()는 true를,
== 연산자는 fasle를 반환합니다.
동등성
- 평가의 대상인 객체의 내용이 같은지를 비교하는 개념입니다.
- 자바에서는 equals()메서드를 사용하여 객체의 동등성을 비교합니다.
class Team {
private List<String> members;
private String name;
...생략
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Team team = (Team) obj;
return Objects.equals(name, team.name) &&
Objects.equals(members, team.members);
}
@Override
public int hashCode() {
return Objects.hashCode(name, member);
}
}
- Object 클래스의 equals() 메서드는 == 연산자를 사용하여 동일성을 비교합니다.
- 자바의 모든 클래스는 Object 클래스를 상속하여 동일성을 비교합니다.
- 그래서 동등성 비교가 필요한 클래스에서 필요에 맞게 두 메서드를 오버라이딩해야 합니다.
학습 자료
'Dev > Java & Spring' 카테고리의 다른 글
[Spring] SpringBoot 실행 후 바로 종료될 때 (0) | 2022.03.06 |
---|---|
[Java] Stack Class (0) | 2022.02.16 |
[Spring Boot] Exception: Required request body is missing (0) | 2022.01.24 |
[Java] JVM 메모리 구조 (0) | 2022.01.01 |
[Java] Comparator (0) | 2021.12.24 |