일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- JavaScript
- Galera Cluster
- 알고리즘
- mongoDB
- C
- 파이썬
- 디자인 패턴
- spring webflux
- Heap
- Algorithm
- 네트워크
- 자바
- design pattern
- JPA
- Data Structure
- 컴퓨터구조
- IT
- c언어
- MySQL
- Proxy
- OS
- MSA
- Kafka
- Spring
- react
- 자료구조
- 운영체제
- redis
- Java
Archives
- Today
- Total
시냅스
[JAVA] Equals와 hashcode 본문
equals, hashcode
Object 의 메소드인 equals와 hashcode에 대해 알아보자.
euqals 함수는 객체의 값이 같은지에 대한 여부를 boolean 값으로 반환하는 함수이다.
hashcode 함수는 객체의 주소값을 해시코드로 반환하는 함수이다.
equals 함수는 객체에 대한 주소 값으로 같은지 여부를 판단하고,
hashcode 함수는 객체의 주소값을 해시테이블로 갖고 있기 때문에
객체의 값이 아닌 다른 기준으로 분류하고 싶다면 클래스 내부에서 오버라이딩 해줘야 한다.
구현 예시
class Car {
private String model;
private String color;
public Car(String model, String color) {
this.model = model;
this.color = color;
}
@Override
public String toString() {
return model + " : " + color;
}
@Override
public int hashCode() {
// return Objects.hash(model, color); 이렇게 주면 자바가 의도한 성능의 해쉬값 줌
return (model.hashCode() + color.hashCode()) / 2;
}
@Override
public boolean equals(Object obj) {
String m = ((Car) obj).model;
String c = ((Car) obj).color;
if (model.equals(m) && color.equals(c))
return true;
else
return false;
}
}
public class HowHashCode {
public static void main(String[] args) {
HashSet<Car> set = new HashSet<>();
set.add(new Car("HY_MD_301", "RED"));
set.add(new Car("HY_MD_301", "BLACK"));
set.add(new Car("HY_MD_302", "RED"));
set.add(new Car("HY_MD_302", "WHITE"));
set.add(new Car("HY_MD_301", "RED"));
System.out.println("인스턴스 수 : " + set.size());
for(Car car : set)
System.out.println(car);
}
}
위에서는 모델명과 색이 같으면 같은 객체로 분류하였다.
따라서 출력은
인스턴스 수 : 4
HY_MD_301 : RED
HY_MD_302 : RED
HY_MD_301 : BLACK
HY_MD_302 : WHITE
으로 확인할 수 있다.
'Java, Spring' 카테고리의 다른 글
IOC와 DI, 컨테이너 (0) | 2022.07.25 |
---|---|
좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2022.07.15 |
[Java] 객체지향(OOP) 관련 용어 정리 (0) | 2022.07.15 |
[Java] Generic - 와일드 카드 Wildcard (0) | 2022.07.11 |
자바 가상 머신, JVM이란 (0) | 2022.07.11 |
Comments