Item 14. Comparable
Comparable์ ๊ตฌํํ ์ง ๊ณ ๋ คํ๋ผ
compareTo๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Comparable์ ๊ตฌํํด์ผ ํ๋ค.(์์ clone๊ณผ๋ ๋ค๋ฅด๊ฒ Object๊ฐ ์๋ Comparable์ ์ ์ธ๋์ด ์์) Comparable์ ๊ตฌํํ๋ฉด ์ด๋ค ๊ฐ์ฒด๋ ์ง ์์ฐ์ ์ธ ์์๋ฅผ ์ ํ ์ ์๊ฒ ๋๋ค.(๋ฐ๋๋ก ๋งํ๋ฉด, ์ ์ํ์ง ์์ ๊ฒฝ์ฐ ์์๋ฅผ ํ์๋กํ๋ TreeMap, TreeSet ๋ฑ์์ ์ฌ์ฉํ ์ ์๋ค.)
compareTo ์ผ๋ฐ ๊ท์ฝ
ํด๋น ๊ฐ์ฒด์ ์ฃผ์ด์ง ๊ฐ์ฒด์ ์์๋ฅผ ๋น๊ตํ์ฌ ์ฃผ์ด์ง ๊ฐ์ฒด๋ณด๋ค ์์ผ๋ฉด ์์ ์ ์, ๊ฐ์ผ๋ฉด 0, ํฌ๋ฉด ์์ ์ ์๋ฅผ ๋ฐํํ๊ณ , ๋น๊ตํ ์ ์๋ ํ์ ๊ฐ์ฒด๊ฐ ์ฃผ์ด์ง๋ฉด ClassCastException์ ๋์ง๋๋ก ์ ์ํ๋ค. Comparable์ ๊ตฌํํ ํด๋์ค x, y, z์ ๋ํด ๋ค์์ ๊ท์ฝ์ ๋ฐ๋ผ์ผ ํ๋ค.
** sgn ํ๊ธฐ: ์ํ์์ ๋งํ๋ ๋ถํธ ํจ์(signum function)๋ฅผ ์๋ฏธํ๋ฉฐ, -1, 0, 1 ์ค ํ๋๋ฅผ ๋ฐํํ๋๋ก ์ ์ํจ
sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
x.compareTo(y) > 0 && y.compareTo(z) > 0
์ด๋ฉดx.compareTo(z) > 0
x.compareTo(y) == 0
์ด๋ฉดsgn(x.compareTo(z)) == sgn(y.compareTo(z))
(x.compareTo(y) == 0) == (x.equals(y))
(ํ์๋ ์๋์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ)
compareTo ๊ตฌํ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ์ ์ผ๋ก ๊ด๊ณ ์ฐ์ฐ์ <, >๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ณด๋ค๋ ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์ ํด๋์ค์ compare ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.(๊ด๊ณ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ค๋ฅ๋ฅผ ๋ผ ์ ์์ด ์ถ์ฒํ์ง ์์) ๊ทธ๋ฆฌ๊ณ , ํต์ฌ ํ๋๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ฐ์ฅ ํต์ฌ์ ์ธ ํ๋๋ถํฐ ๋น๊ตํ ๋ค ์์๊ฐ ๊ฒฐ์ ๋๋ฉด ์ฆ์ ๋ฐํํ์ฌ ๋ถํ์ํ๊ฒ ๋น๊ตํ๋ ์ผ์ ์ค์ด๋ ๊ฒ์ด ์ข๋ค.
์ ๋ด์ฉ์ Java 8 ์ด์์์๋ ๋ฉ์๋ ์ฐ์ ๋ฐฉ์์ผ๋ก ๋น๊ต์๋ฅผ ์์ฑํ ์ ์๋ค.(์ฝ๊ฐ์ ์ฑ๋ฅ ์ ํ๊ฐ ์์ ์ ์์ง๋ง, ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ฏ๋ก ๊ถ์ฅ)
Last updated
Was this helpful?