일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Stream
- 인텔리제이
- javascript error
- ojdbc6
- 프로젝트 여러 개
- Mac
- 프로그래머스
- MySQL
- TypeScript
- svn
- Java
- InteliJ
- 봤어요처리
- REST
- flutter mac 설치
- 코어자바스크립트
- Aspect
- datagrip 한글깨짐
- DART
- JavaScript
- Spring
- tecoble
- @RequestBody
- maven
- db
- class-transformer
- oracle
- SQL
- eqauls-hashcode
- node.js
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 |