728x90
어느덧 신입사원으로 회사에 들어와 Java/Spring 개발자로 일한지 1년이 되어간다.
오늘 개발을 하는데 문득 이런 생각이 들었다.
매일 코드를 보고 만지지만 과연 나는 이 코드를 좋게 만들기 위해 고민하고 있는가..
그 생각이 들게 한 부분은 java에서 값에 대한 비교를 할때 생각이 들었다.
생각은 길게 했지만 진짜 파악하고 싶은 요점은 두개는 뭐야? 라는 것이 궁극적으로 궁금했기 때문에 간단하게 적어보겠다.
먼저 eqauls()는 ==과 같은기능을 하며 객체 내부의 값을 비교할때 주로 사용한다.
if(data1.equals("Y")){
System.out.println("Y입니다.");
}
이와 같이 나는 data1의 값이 "Y"야라고 구분하고 싶을때 사용한다.
다음으로 hashcode()는 객체 고유의 해쉬코드를 리턴하는 함수이다.
이 해쉬코드가 다르다면 equals에서도 비교가 제대로 이루어지지않는다.
예를 들어서 설명해보자면
data1 = "데이터1"의 hashcode가 1234인데
data2 = "데이터1"의 hashcode가 5678이라고 한다면
아래와 같이 data1을 data2와 비교시
if(data1.equals(data2)){
System.out.println("Y입니다.");
}
주소 값이 다르기 때문에 false가 리턴되어 "Y입니다."는 출력되지 않을 것이다.
그렇다고 해쉬코드가 다른 두 객체를 완전히 비교할 방법이 없는 것은 아니다.
사용하는 VO에서 hashcode를 재정의하여 사용하는 방법이다.
@Override
pubilc int hashCode(){
return data.hashCode(); //data가 동일한 문자열인 경우에 같은 해쉬코드값을 리턴해준다.
}
코딩을 하다가 이 해쉬코드의 문제에 직면하게 된것은 아니다.
하지만 equals를 쓰다보니 해쉬코드가 생각났고 궁금점이 생겨 두서없이 글을 정리하게 되었다..
728x90
'개발자로 나아가는 나의 언어들 > JAVA' 카테고리의 다른 글
[JAVA/Softeer] [한양대 HCPC 2023] Tren del Fin del Mundo (0) | 2024.09.23 |
---|---|
[JAVA/Softeer] [한양대 HCPC 2023] 개표 (0) | 2024.09.23 |
자바 알고리즘만들어보기 - 드래곤볼 (0) | 2019.03.18 |
자바 알고리즘만들어보기 - 가장 큰 수 알고리즘(백준알고리즘) (0) | 2019.03.15 |
자바 알고리즘만들어보기 - 유한의계단 (1) | 2019.03.14 |