Java์์ comparator๋ก ์ ๋ ฌ ๊ธฐ์ค ๋ฐ๊พธ๊ธฐ
์๋ฐ๋ก ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด๋ฅผ ํ๋ค ๋ณด๋ฉด ํน์ ์กฐ๊ฑด์ ์ํ ์ ๋ ฌ์ ์ํํ ๋๊ฐ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐ์์๋ ์ ๋ ฌ์ ์ํด์ Arrays.sort()
์ static ๋ฉ์๋๋ ,Collections.sort()
์ static ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง๋ง, ์ด๋ ๊ธฐ๋ณธ ์ ๋ ฌ์ธ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํน์ ์กฐ๊ฑด์ ์ํ ์ ๋ ฌ(๋ค์ฐจ์ ๋ฐฐ์ด์ ์ ๋ ฌ, ๊ฐ์ฒด ์ ๋ ฌ, ์กฐ๊ฑด ์ ๋ ฌ)์ ์ํํ๊ธฐ๋ ๋ถ๊ฐ๋ฅํ๋ค.
์ด ๋ถํธํจ์ ํด์ํด๊ธฐ ์ํด ๋ ๊ฐ์ง์ ์กฐ๊ฑด ์ ๋ ฌ ๋ฐฉ์์ด ์กด์ฌํ๋๋ฐ ๋ฐ๋ก Comparator, Comparable ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ ์ ๋ ฌ ๋ฉ์๋ ์ฌ์ ์์ด๋ค.
ํ์ง๋ง ๋ ์ธํฐํ์ด์ค ๊ฐ์ ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ฅธ ์ฐจ์ด๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ทธ ์ฐจ์ด๋ถํฐ ๋ช ํํ๊ฒ ์ง๊ณ ๋์ด๊ฐ์.
Comparator vs Comparable
Comparable
comparable
์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ ์ ๋ ฌ์ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ด ์์ ๋ ์ฌ์ฉํ๋ค.
- ๊ฐ์ฒด์ ํน์ field๋ฅผ ์ด์ฉํ ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ์ํ ๊ฒฝ์ฐ
- ๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค ์ค์ ์ ๋ณ๊ฒฝ์ ์ํ ๊ฒฝ์ฐ
Comparator
comparator
์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ ์ ๋ ฌ์ ๋ค์๊ณผ ๊ฐ์ ๋ชฉ์ ์ด ์์ ๋ ์ฌ์ฉํ๋ค.
- ๊ฐ์ฒด์ ํน์ field๋ฅผ ์ด์ฉํ์ฌ ํน์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ์ํ ๊ฒฝ์ฐ
- ๊ธฐ๋ณธ ์ ๋ ฌ ๊ธฐ์ค(์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์)์ ๊ธฐ์ค์ด ์๋ ๋ค๋ฅธ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ์ํ ๊ฒฝ์ฐ
comparable
compareTo()
comparable
์ธํฐํ์ด์ค์ ๊ฒฝ์ฐ compareTo() ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ์ฌ ์ฌ์ฉํ๋ค.
comparable
์ธํฐํ์ด์ค๋ฅผ implements๋ฅผ ํ ๊ฒฝ์ฐ ์ฌ์ ์์ ๊ฐ์ ํ์ ์ํด ์ค๋ฅ๊ฐ ์๊ธฐ๋๋ฐ ์ด๋ฅผ alt+enter
๋ฅผ ํตํด์ ๋ฉ์๋๋ฅผ override๋ฅผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์๋์ ์ผ๋ก compareTo()
๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ ์ ์๊ฒ ๋๋ค.
- return : int
- parameter : ๋น๊ต ๋์
์์ ๊ฐ์ด compareTo()
๋ int๋ฅผ returnํ๊ฒ ๋๋๋ฐ ์ด int ๊ฐ์ ์ด์ฉํด์ ์ ๋ ฌ์ ์ํํ๊ฒ ๋๋ค. ๊ฐ์ฒด์ A.compareTo(B)
๊ฐ ํธ์ถ๋ ๋ ๋์ด์ค๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋น๊ตํ์ฌ ์ ๋ ฌ์ ์ํํ๋ค.
์ ๋ ฌ ๊ธฐ์ค
์ ๋ ฌ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ๋ค.
return
๋๋ int
์ ๊ฐ์ด ์์์ด๋ฉด ํ์ฌ ์ธ์คํด์ค๊ฐ ๋น๊ต ๋์ ์ธ์คํด์ค์ ๊ฐ๋ณด๋ค ์๊ณ , ์์์ด๋ฉด ํ์ฌ ์ธ์คํด์ค๊ฐ ๋น๊ต ๋์ ์ธ์คํด์ค์ ๊ฐ๋ณด๋ค ํฌ๋ค.
๋ฅผ ํ์ด์ ๋ณด์๋ฉด,
A<B ์ธ ๊ฒฝ์ฐ๋ ์์๋ฅผ return
A=B ์ธ ๊ฒฝ์ฐ๋ 0 ์ return
A>B ์ธ ๊ฒฝ์ฐ๋ ์์๋ฅผ return
์ด ๊ฒ์ด default ๊ฐ์ผ๋ก ์ ์ฅ๋์ด ์๊ณ String
ํด๋์ค๋ ๋ค๋ฅธ ์๋ฃํ ํด๋์ค์ implements ๋์ด์๊ธฐ ๋๋ฌธ์ ์์ ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๊ฟ์ฃผ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
์ด์ default ๊ฐ์ผ๋ก ์ ์ฅ๋ ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๊ฟ ๊ธฐ์กด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ผ๋ก ๋ฐ๊ฟ๋ณด์.
์์ default ์ ๋ ฌ ๊ธฐ์ค์ ์ด์ฉํ๋ค๋ฉด
์ ๊ฒฐ๊ณผ๋ก
๊ฐ ์ถ๋ ฅ๋๋ค.
ํ์ง๋ง ์ ๋ ฌ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊ฟ๋ณธ๋ค๋ฉด
A<B ์ธ ๊ฒฝ์ฐ๋ ์์๋ฅผ return
A=B ์ธ ๊ฒฝ์ฐ๋ 0 ์ return
A>B ์ธ ๊ฒฝ์ฐ๋ ์์๋ฅผ return
์ ๊ฐ์ด ์ญ์์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋๊ธ