Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
more
Archives
Today
Total
관리 메뉴

ITSTEIN

java equals(), hashCode() 분석 본문

JAVA

java equals(), hashCode() 분석

the awesomest 2018. 3. 14. 21:39

자바의 equals()와 hashCode()는 java.lang.Object의 메소드로서 자바의 모든 객체가 상속받아서 사용하고 있다. 

메소드의 목적은 객체의 비교이다. 


1. equals()

equals()메소드는 객체의 내용을 비교하기 위한 메소드이다. 

equals의 영어풀이는 다음과 같다.


equal(equals)

 

미국·영국 [|i:kwəl] 발음듣기 영국식 발음듣기 중요도 별점 2개 예문보기

1. (수・양・가치 등이) 동일한   2. 동등한, 평등한   3. 감당할 수 있는


'수', '양', '가치'가 동일한, 동등한의 의미를 갖고 있는것과 같이, 객체의 내용이 동일한지 비교하는 것이 주 목적이다.


예를 들면 String, Map클래스의 equals()메소드가 대표적이 예이다. 


1) String 문자열을 비교할때, ==  연산자를 사용하지 않고 equals()를 사용한다. 

2) Map의 내용 비교에서도, equals()를 이용하여 같은 데이터가 들어있는지 내용비교가 가능하다. 


직접 설계한 VO, MODEL, DTO등의 클래스의 경우에는 equals()메소드를 재정의를 해야지만 객체의 내용비교가 가능해진다.


2. hashCode()

hashCode()메소드는 객체가 동일한 객체인지 비교하기 위한 메소드이다.


자바 collection의 contain()메소드는 내부적으로 hashCode비교를 통해서, 동일한 객체가 있는지 검색을 하게된다. 


hashCode()와 관련된 규약은 다음과 같다.

1) equals() 로 비교시 두개의 오브젝트가 같다면, hashCode() 값도 같아야 한다. 

2.) equals() 로 비교시 false 라면, hashCode() 값은 다를수도, 같을수도 있다. 그러나 성능을 위해서는 hashCode() 값이 다른것이 낫다. 그래야 해싱 알고리즘으로 Set 에 해당 오브젝트가 존재하는지 아닌지 빠르게 검색할 수 있다.

3) hashCode() 값이 같다고 해서, eqauls() 가 true 를 리턴하는 것은 아니다. 해싱 알고리즘 자체의 문제로, 같은 해시값이 나올 수 있다.



VO, MODEL, DTO등에서 equals(), hashCode()를 재정의 해야할때는, 객체의 내용에 의해서 서로 다른 객체가 같다고 판단을 해야 하는 경우이다. 



참고 : 

http://anster.tistory.com/160

http://wiki.gurubee.net/pages/viewpage.action?pageId=6260166

http://wiki.gurubee.net/pages/viewpage.action?pageId=1507382

http://ojava.tistory.com/15

https://yish-foss.blogspot.kr/2014/07/java-object-hashcode-equals.html






Comments