item 14 incheol - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

Effective Java 3e ์•„์ดํ…œ 14๋ฅผ ์š”์•ฝํ•œ ๋‚ด์šฉ ์ž…๋‹ˆ๋‹ค.

compareTo๋Š” ๋‹จ์ˆœ ๋™์น˜์„ฑ ๋น„๊ต์— ๋”ํ•ด ์ˆœ์„œ๊นŒ์ง€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ œ๋‚ด๋ฆญํ•˜๋‹ค. Comparable์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋“ค์—๋Š” ์ž์—ฐ์ ์ธ ์ˆœ์„œ๊ฐ€ ์žˆ์Œ์„ ๋œปํ•œ๋‹ค.

compareTo ๊ทœ์•ฝ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ž.

  • ์ฒซ ๋ฒˆ์งธ ๊ทœ์•ฝ์€ ๋‘ ๊ฐ์ฒด ์ฐธ์กฐ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ” ๋น„๊ตํ•ด๋„ ์˜ˆ์ƒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•œ๋‹ค๋Š” ์–˜๊ธฐ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๊ทœ์•ฝ์€ ์ฒซ๋ฒˆ์งธ๊ฐ€ ๋‘ ๋ฒˆ์งธ๋ณด๋‹ค ํฌ๊ณ  ๋‘ ๋ฒˆ์งธ๊ฐ€ ์„ธ ๋ฒˆ์งธ๋ณด๋‹ค ํฌ๋ฉด, ์ฒซ ๋ฒˆ์งธ๋Š” ์„ธ ๋ฒˆ์งธ๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • ๋งˆ์ง€๋ง‰ ๊ทœ์•ฝ์€ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด๋“ค๋ผ๋ฆฌ๋Š” ์–ด๋–ค ๊ฐ์ฒด์™€ ๋น„๊ตํ•˜๋”๋ผ๋„ ํ•ญ์ƒ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

Comparable์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•ด ๊ฐ’ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ํ™•์žฅํ•˜๋Š” ๋Œ€์‹  ๋…๋ฆฝ๋œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ํด๋ž˜์Šค์— ์›๋ž˜ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•„๋“œ๋ฅผ ๋‘์ž.

๋งˆ์ง€๋ง‰ ๊ทœ์•ฝ์€ ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด compareTo ๋ฉ”์„œ๋“œ๋กœ ์ˆ˜ํ–‰ํ•œ ๋™์น˜์„ฑ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๊ฐ€ equals์™€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ ์ด์œ ๋Š” ์ •๋ ฌ๋œ ์ปฌ๋ ‰์…˜๋“ค์€ ๋™์น˜์„ฑ์„ ๋น„๊ตํ•  ๋•Œ equals ๋Œ€์‹  compareTo๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

compareTo ๋ฉ”์„œ๋“œ๋Š” ๊ฐ ํ•„๋“œ๊ฐ€ ๋™์น˜์ธ์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•œ๋‹ค. Comparable์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ ํ•„๋“œ๋‚˜ ํ‘œ์ค€์ด ์•„๋‹Œ ์ˆœ์„œ๋กœ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค๋ฉด Comparator๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•œ๋‹ค.

ํด๋ž˜์Šค์— ํ•ต์‹ฌ ํ•„๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ์–ด๋Š ๊ฒƒ์„ ๋จผ์ € ๋น„๊ตํ•˜๋Š๋ƒ๊ฐ€ ์ค‘์š”ํ•ด์ง„๋‹ค. ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ํ•„๋“œ๋ถ€ํ„ฐ ๋น„๊ตํ•ด๋‚˜๊ฐ€์ž