๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/Java, Python

[Java] equals(), hashCode()

by syLim___ 2023. 10. 25.
728x90

โœ… equals()

 - java.lang.Object ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

package java.lang;

...

public class Object {

    ...
    
    public boolean equals(Object obj) {
            return (this == obj);
    }
    
    ...
}

 

 - ๋ชจ๋“  ์ž๋ฐ” ๊ฐ์ฒด๋ผ๋ฆฌ ๋™๋“ฑ์„ฑ์œผ์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก, ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ธ Object์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

    (๋™๋“ฑ์„ฑ์ด๋ž€? ๋‘ ๊ฐ์ฒด๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋™์ผํ•œ ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๐Ÿ“„[Java] ๋™์ผ์„ฑ, ๋™๋“ฑ์„ฑ)

 

- ์ฐธ์กฐ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™๋“ฑ์„ฑ์„ ํŒ๋‹จํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

- ๋‹ค์‹œ ๋งํ•ด, ๋‘ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์ด ๊ฐ™์œผ๋ฉด(๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด) true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

 

- ๋‘ ๊ฐ์ฒด๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋™์ผํ•œ์ง€ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์€ ํด๋ž˜์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—,

    ํ•„์š”ํ•˜๋‹ค๋ฉด ์ด equals() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(override)ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

 - String ํด๋ž˜์Šค, ๊ธฐ๋ณธ์ž๋ฃŒํ˜• Wrapper ํด๋ž˜์Šค๋“ค(Integer, Double ๋“ฑ..), Data ํด๋ž˜์Šค, File ํด๋ž˜์Šค์—๋Š”
    equals() ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด ์žˆ๋‹ค.
 - StringBuffer ํด๋ž˜์Šค์—๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

 

โœ… hashCode()

 - java.lang.Object ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

package java.lang;

...

public class Object {

    ...
    
    public native int hashCode();
    
    ...
    
}

 

- ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์„ฑ๋Šฅ์ด ์ข‹์€ ํ•ด์‹œ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก, ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ธ Object ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ธฐ๋ณธ ํ•ด์‹œ ํ•จ์ˆ˜์ด๋‹ค.

ํ•ด์‹œํ•จ์ˆ˜๋ž€, ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ํ•ด์‹œ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

- ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•œ๋‹ค.

 

 

๐Ÿฅ Objects.hash()

- java.util.Objects ํด๋ž˜์Šค๋Š” hash() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

- ์ด ๋ฉ”์„œ๋“œ๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ ์ž…๋ ฅ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

โœ… equals() ์™€ hashCode()๋ฅผ ํ•จ๊ป˜ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

 

์ผ๋ฐ˜์ ์œผ๋กœ equals ๋ฉ”์„œ๋“œ์™€ hashCode ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜๋Š” ๊ฒƒ์ด ์›์น™์ด๋‹ค.

ํŠนํžˆ ์ž๋ฐ”์˜ ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•  ๊ฐ์ฒด๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ hashCode() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์•ผ ํ•œ๋‹ค.

 

- ์™œ๋ƒํ•˜๋ฉด, ์ž๋ฐ” ์ปฌ๋ ‰์…˜์˜ ํ•ด์‹œ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ๋Š” ํ•ด์‹œํ•จ์ˆ˜๋กœ ์ด hashCode() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

- ๋งŒ์•ฝ equals()๋งŒ ์žฌ์ •์˜ํ•˜๊ณ  hashCode()๋Š” ์žฌ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ํ•ด์‹œ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, 

    hashCode()๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋  ๊ฒƒ์ด๋‹ค.

- ๊ทธ ๊ฒฐ๊ณผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๋‘ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๊ณ ,

    ํ•ด์‹œ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ฐ์ฒด๊ฐ€ ์ค‘๋ณต ์ €์žฅ๋˜๊ฑฐ๋‚˜, ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋“ฑ)

 

- ๋งŒ์•ฝ hashCode()๋งŒ ์žฌ์ •์˜ํ•˜๊ณ  equals()๋Š” ์žฌ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ํ•ด์‹œ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด,

    ํ•ด์‹œ ์ธ๋ฑ์Šค ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

- ํ•ด์‹œ ์ธ๋ฑ์Šค๊ฐ€ ์ถฉ๋Œํ•  ๊ฒฝ์šฐ, ๊ฐ™์€ ํ•ด์‹œ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•˜๋ฉฐ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

- equals() ๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™๋“ฑ์„ฑ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋ฏ€๋กœ ๊ฐ์ฒด ๊ฒ€์ƒ‰์— ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… Reference

 - ์ž๋ฐ”์˜ ์ •์„ (๋‚จ๊ถ์„ฑ)

- https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2/dashboard

728x90

'๊ฐœ์ธ ๊ณต๋ถ€ > Java, Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] ๋™์ผ์„ฑ, ๋™๋“ฑ์„ฑ  (0) 2024.06.26
[Java] Reflection  (0) 2023.11.17
[Java] BlockingQueue  (0) 2023.10.18
[Java] Java TCP socket programming  (0) 2023.09.19
[Java] ์ž๋ฐ” ๋กœ๊น…(Logging)  (0) 2023.09.06