ITEM 14: Consider implementing comparable
Comparable
์ ๋จ์ ๋์น์ฑ ๋น๊ต์ ์์ ๋น๊ต๋ฅผ ํ ์ ์๋ Generic ์ธํฐํ์ด์ค์ด๋ค. Comparable
์ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค์๋ ์์ฐ์ ์ธ ์์๊ฐ ์์์ ๋ปํ๋ฉฐ, Comparable
์ ๊ตฌํํ ๊ฐ์ฒด๋ค์ ๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๊ฒ ์ ๋ ฌํ ์ ์๋ค.
์ฌ์ค์ ์๋ฐ ํ๋ซํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ ๊ฐ ํด๋์ค์ ์ด๊ฑฐํ์
์ด Comparable
์ ๊ตฌํํ์ผ๋ฉฐ, ์ํ๋ฒณ, ์ซ์, ์ฐ๋ ๊ฐ์ด ์์๊ฐ ๋ช
ํํ ๊ฐ ํด๋์ค๋ฅผ ์์ฑํ๋ค๋ฉด Comparable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
compareTo ๋ฉ์๋ ์ผ๋ฐ ๊ท์ฝ
sgn
์ signum function์ ๋ปํ๊ณ , ํํ์์ ๊ฐ์ด ์์, 0, ์์์ผ ๋ -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))
์ฌ์ผํ๋ค. (์ด ๊ถ๊ณ ๋ ํ์๋ ์๋์ง๋ง ๊ผญ ์งํค๋๊ฒ ์ข์ผ๋ฉฐ, ๋ง์ฝ ์งํค์ง ์์๋ค๋ฉด ์ด ํด๋์ค์ ์์๋equals
๋ฉ์๋์ ์ผ๊ด๋์ง ์๋ ๋ค๋ ๊ฒ์ ๋ช ์ํด์ผํ๋ค.)
compareTo
๊ท์ฝ์ ์งํค์ง ๋ชปํ๋ฉด ๋น๊ต๋ฅผ ํ์ฉํ๋ ํด๋์ค(TreeSet
, TreeMap
, Collections
, Arrays
)๋ฅผ ํ์ฉํ์ง ๋ชปํ๋ค.
4๋ฒ ๊ท์ฝ์ ์งํค์ง ์์ ์ฆ, compareTo
์ equals
์ ๊ฒฐ๊ณผ๊ฐ ์ผ๊ด๋์ง ์์ ๊ฒฝ์ฐ์๋ ์ด ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ ฌ๋ ์ปฌ๋ ์
์์ ์๋์น ์์ ๋์์ ํ ์ ์๋ค.
HashSet
์ equals
๋ฉ์๋๋ก ๋น๊ต๋ฅผ ํ๊ธฐ๋๋ฌธ์ HashSet
์ ์์๋ 2๊ฐ์ด๊ณ , TreeSet
์ compareTo
๋ฉ์๋๋ก ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ์์์ ๊ฐ์๋ 1๊ฐ์ด๋ค.
Comparable
์ ํ์
์ ์ธ์๋ก ๋ฐ๋ ์ ๋ค๋ฆญ ์ธํฐํ์ด์ค๋ก, compareTo
๋ฉ์๋์ ์ธ์ ํ์
์ ์ปดํ์ผํ์์ ์ ํด์ง๋ค. ์ธ์ ํ์
์์ฒด๊ฐ ์๋ชป๋๋ค๋ฉด, ์ปดํ์ผ ์์ฒด๊ฐ ๋์ง ์์ผ๋ฉฐ, null์ ์ธ์๋ก ๋ฃ์ด ํธ์ถํ๋ค๋ฉด NullPointerExeption
์ด ๋ฐ์ํ ๊ฒ์ด๋ค. compareTo
๋ ๊ฐ ํ๋๊ฐ ๋์น์ธ์ง ๋น๊ตํ๋ ๊ฒ์ด ์๋ ์์๋ฅผ ๋น๊ตํ๋ค.
compareTo
๋ฉ์๋์์ ๊ด๊ณ ์ฐ์ฐ์ <
์ >
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ถ์ฒํ์ง ์์ผ๋ฉฐ, ์๋ฐ7๋ถํฐ ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์
ํด๋์ค๋ค์ ์๋ก ์ถ๊ฐ๋ compare
์ ์ด์ฉํ๋ฉด ๋๋ค.
ํด๋์ค์ ํต์ฌ ํ๋๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด ๊ฐ์ฅ ํต์ฌ์ ์ธ ํ๋๋ถํฐ ๋น๊ตํด์ผํ๋ค. ๋น๊ต ๊ฒฐ๊ณผ๊ฐ 0์ด ์๋๋ผ๋ฉด(์์๊ฐ ์ ํด์ง๋ค๋ฉด) ๋ฐํํ๋ฉด ๋๋ค.
์๋ฐ 8์์๋ Comparator
์ธํฐํ์ด์ค๋ฅผ ํ์ฉํด์ ๊ตฌํํ ์ ์๋ค.
์ด ๋ฐฉ์์ ๊ฐ๊ฒฐํ์ง๋ง ,์ฝ๊ฐ์ ์ฑ๋ฅ์ ํ๊ฐ ๋ค๋ฐ๋ฅธ๋ค. Comparator
๋ ์๋ฐ์ ์ซ์์ฉ ๊ธฐ๋ณธ ํ์
์ ๋ชจ๋ ์ปค๋ฒํ ์ ์๋ค.
๋น๊ต์ ์ฃผ์ ์ฌํญ
๋ค์ ๋ฐฉ์์ ์ ์ ์ค๋ฒํ๋ก์ฐ๋, ๋ถ๋์์์ ๊ณ์ฐ ๋ฐฉ์์ ๋ฐ๋ฅธ ์ค๋ฅ๋ฅผ ๋ผ ์ ์์ผ๋ฉฐ, ์ฑ๋ฅ ๋ํ ์๋ฑํ ๋น ๋ฅด์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ฉด ์๋๋ค. ์๋ ๋ ๋ฐฉ์์ค ํ๋๋ก ๊ตฌํํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
์ ์ compare ๋ฉ์๋ ํ์ฉ
๋น๊ต์ ์์ฑ ๋ฉ์๋ ํ์ฉ
์ ๋ฆฌํ์ง๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์์๋ฅผ ๊ณ ๋ คํ๋ ๊ฐ ํด๋์ค ์์ฑ์
Comparable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ํด๋น ์ธ์คํด์ค๋ฅผ ์ฝ๊ฒ ์ ๋ ฌ, ๊ฒ์, ๋น๊ตํ ์ ์๋ ์ปฌ๋ ์ ๊ณผ ์ด์ฐ๋ฌ์ง๋๋ก ํด์ผ ํ๋ค.compareTo
๋ฉ์๋์์ ํ๋ ๊ฐ ๋น๊ต์<
,>
์ฐ์ฐ์๋ ์ฌ์ฉํ์ง ๋ง์๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์ ํด๋์ค๊ฐ ์ ๊ณตํ๋ ์ ์
compare
๋ฉ์๋๋Compartor
์ธํฐํ์ด์ค๊ฐ ์ ๊ณตํ๋ ๋น๊ต์ ์์ฑ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์.
Last updated