๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”

equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]

Amenable 2023. 1. 5. 23:27

  ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด equals๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ๋ง์ž. equlas ๋ฉ”์„œ๋“œ๋Š” ์žฌ์ •์˜ํ•˜๊ธฐ ์‰ฌ์›Œ ๋ณด์ด์ง€๋งŒ ๊ณณ๊ณณ์— ํ•จ์ •์ด ๋„์‚ฌ๋ฆฌ๊ณ  ์žˆ์–ด์„œ ์ž์นซํ•˜๋ฉด ๋”์ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” 'equals๋ฅผ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” 4๊ฐ€์ง€ ์ƒํ™ฉ'๊ณผ '๋งŒ์•ฝ equals ์žฌ์ •์˜๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” 5๊ฐ€์ง€ ๊ทœ์•ฝ'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. 

 

 

1. ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” 4๊ฐ€์ง€ ์ƒํ™ฉ ๐Ÿšฉ

1. ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ ๐ŸŒด

  ์‹ฑ๊ธ€ํ†ค, ENUM ๋“ฑ ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ equals๋ฅผ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. 

 

2. ์ธ์Šคํ„ด์Šค์˜ '๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ(logical equality)'์„ ๊ฒ€์‚ฌํ•  ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ ๐ŸŒด

  ์„ค๊ณ„์ž๊ฐ€ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ ๋ฐฉ์‹์„ ์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์• ์ดˆ์— ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฒฝ์šฐ Object์˜ ๊ธฐ๋ณธ equals๋ฅผ ์‚ฌ์šฉํ•˜์ž.

 

3. ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•œ equals๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค์—๋„ ๋”ฑ ๋“ค์–ด๋งž๋Š” ๊ฒฝ์šฐ ๐ŸŒด

  ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ๋Œ€๋ถ€๋ถ„์˜ Set ๊ตฌํ˜„์ฒด๋Š” AbstractSet์ด ๊ตฌํ˜„ํ•œ equals๋ฅผ ์ƒ์†๋ฐ›์•„ ์“ฐ๊ณ , List ๊ตฌํ˜„์ฒด๋“ค์€ AbstractList๋กœ๋ถ€ํ„ฐ, Map ๊ตฌํ˜„์ฒด๋“ค์€ Abstractmap์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์•„ equals๋ฅผ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค.

 

4. ํด๋ž˜์Šค๊ฐ€ private์ด๊ฑฐ๋‚˜ package-private์ด๊ณ  equals ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ ๐ŸŒด

 

2. equals๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ, ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” 5๊ฐ€์ง€ ๊ทœ์•ฝโš 

  ์šฐ์„ , equals๋ฅผ ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ์•Œ์•„๋ณด์ž. ๊ฐ์ฒด ์‹๋ณ„์„ฑ(object identity; ๋‘ ๊ฐ์ฒด๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€๊ฐ€)์ด ์•„๋‹ˆ๋ผ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ƒ์œ„ ํด๋ž˜์Šค์˜ equals๊ฐ€ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ๋น„๊ตํ•˜๋„๋ก ์žฌ์ •์˜๋˜์ง€ ์•Š์•˜์„ ๋•Œ equals๋ฅผ ์žฌ์ •์˜ ํ•ด์•ผ ํ•œ๋‹ค.

  equals ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์•„๋ž˜์˜ ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค. 

  • ๋ฐ˜์‚ฌ์„ฑ(reflexivity)
    null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x์— ๋Œ€ํ•ด, x.equals(x)๋Š” true๋‹ค.
    A.equals(A) == true

  • ๋Œ€์นญ์„ฑ(symmetry)
    null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x, y์— ๋Œ€ํ•ด, x.equals(y)๊ฐ€ true๋ฉด y.equals(x)๋„ true๋‹ค.
    A.equals(B) == B.equals(A)

  • ์ถ”์ด์„ฑ(transitivity)
    null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x, y, z์— ๋Œ€ํ•ด x.equals(y)๊ฐ€ true์ด๊ณ  y.equals(z)๋„ true๋ฉด x.equals(z)๋„ true๋‹ค.
    A.equals(B) && B.equals(C), A.equals(C)

  • ์ผ๊ด€์„ฑ(consistency)
    null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x, y์— ๋Œ€ํ•ด, x.equals(y)๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ํ˜ธ์ถœํ•˜๋ฉด ํ•ญ์ƒ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ•ญ์ƒ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    A.equals(B) == A.equals(B)

  • null-์•„๋‹˜
    null์ด ์•„๋‹Œ ๋ชจ๋“  ์ฐธ์กฐ ๊ฐ’ x์— ๋Œ€ํ•ด, x.equals(null)์€ false๋‹ค.
    A.equals(null) == false

  ๋‹ค์Œ ๊ธ€์—์„œ๋Š” 5๊ฐ€์ง€ ๊ทœ์•ฝ์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ์ƒ์„ธํ•˜๊ฒŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž. 

 

ํ•ด๋‹น ๊ธ€์€ ๋ฐฑ๊ธฐ์„  ๋‹˜์˜ '์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์™„๋ฒฝ ๊ณต๋žต'์„ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์ž‘์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋Œ“๊ธ€์ˆ˜0