Comparator ์ Comparable์ ๋ํด ์ดํดํ๊ธฐ
Table of contents
Collections.sort()
๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ Arrays ๋ฅผ import ํด์ค ๋ค,
Arrays์ sort ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํด์ค๋ค!
sort ๋ฉ์๋๋ Comparable
์ธํฐํ์ด์ค๋ฅผ Arrays
ํด๋์ค์์ ๊ตฌํํ์ฌ ๋์์ํค๋๋ก ํ ๊ฒ์ด๋ค.
public interface Comparator{
int compare(Object o1, Object o2);
boolean equals(Object obj);
}
public interface Comparable{
public int compareTo(Object o);
}
Comparator
์ธํฐํ์ด์ค์ Comparable
์ธํฐํ์ด์ค์ ์ค์ ์์ค์ฝ๋๋ ์์ ๊ฐ๋ค.
Comparator
์ธํฐํ์ด์ค ์์๋ compare
๋ฉ์๋์ equals
๋ฉ์๋๊ฐ ์๊ณ
Comparable
์ธํฐํ์ด์ค ์์๋ compareTo
๋ฉ์๋๊ฐ ์กด์ฌํ๋ค.
compare
๋ฉ์๋์ compareTo
๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก int
๊ฐ์ ๋ฐํํ๋๋ก ๋์ด์๊ณ ,
์์, 0, ์์ ์ค์ ํ๋๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํด์ผํ๋ค. ์์๊ฐ ๊ผญ -1์ด๊ณ ์์๊ฐ ๊ผญ +1 ์ผ ํ์๋ ์๊ณ ๋ถํธ๋ง ์ ๋ง์ถฐ์ฃผ๋ฉด ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก, Compare ๋ฉ์๋๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ฒ๋ ๊ตฌํ๋์ด ์๋ค.
๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํ์ ๋, ์์๊ฐ์ด ๋ฆฌํด๋๋ฉด, ์ด๋ฏธ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋์ด์๋ค๋ ๋ป์ผ๋ก ๋ฐ์๋ค์ด๊ณ ์์๋ฅผ ๋ฐ๊พธ์ง ์๊ณ , ์์๊ฐ์ด ๋ฆฌํด๋๋ฉด ๋ ๊ฐ์ฒด์ ์์น๋ฅผ ๋ฐ๊ฟ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ๋ง๋ค์ด์ฃผ๊ฒ๋ ๊ตฌํ๋์ด์๋ค.
์ฆ, Collections
๋ ๊ธฐ๋ณธ์ ์ผ๋ก sort
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์, ์ ๋ ฌ์ ๊ธฐ์ค์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด Comparator์ implements ํด์ฃผ๊ณ compare ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ฃผ๊ฑฐ๋, Comparable์ implements ํด์ฃผ๊ณ compareTo ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ฃผ์ด ๊ธฐ์ค์ ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค.
์ ๋ฆฌ
Comparable
์ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ ๊ฒฝ์ฐ๋ ๊ธฐ์ค ์ ๋ ฌ์ ์ ๊ณตํ๊ณ ์ถ์๋(์ง์ ์๋ก ๊ตฌํํ ๊ฐ์ฒด์ ๊ฒฝ์ฐ ๋ณ์ ๊ฐฏ์๊ฐ ๋ค์ํ๊ธฐ ๋๋ฌธ์)!
Comparator
๋ ๊ธฐ์กด์ ๊ตฌํ๋์ด์๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ์๋ ์๋ก์ด ์ ๋ ฌ์ ํ๊ณ ์ถ์๋ ๊ตฌํํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค!์ ๋ง ์ฝ๊ฒ ์๊ฐํ๋ฉด, if ๋ฌธ์ ์ด์ฉํด์ ๊ธฐ์ค์ ์ ํ๊ณ ์์๋ฅผ returnํ๋ฉด ๋ ์์น๋ฅผ ๋ฐ๊พธ๊ณ , ์์๋ฅผ returnํ๋ฉด ๋ ์์น๋ฅผ ๊ทธ๋๋ก ๋ ๋๋ค ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Comparable ๊ตฌํํ๊ธฐ
์ ๊ฐ์ ๊ฒฝ์ฐ๋ Student
๊ฐ์ฒด์์ name
๊ณผ no
๋๊ฐ์ ๋ณ์๊ฐ ์กด์ฌํ๊ณ , ์ด๋ค ๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ํ ์ง ์ ๊ณตํด์ผํ๊ธฐ ๋๋ฌธ์ Comparable ์ implements ํ์๋ค.
๊ทธ๋ฆฌ๊ณ compareTo()
๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์๋๋ฐ, ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์ค๋ ๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ๋ฐฐ์น๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค.
์์์ ์ค๋ช ํ๋ฏ์ด, ๋ค์์๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ๊ธฐ์ค์ ์ธ์ฐ๊ณ ๊ทธ ๊ธฐ์ค์ ๋ง์กฑํ์ ๋ 1์ ๋ฐํํ๊ฒ๋ ๊ตฌํํ๋ฉด ๋๋ค.
์ ์์์์๋ .no
๋ฅผ ํ์ฉํ์ฌ ๋ฒํธ๋ฅผ ํตํด ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์ค๋ ๊ฐ์ฒด(๋ค์์๋ ๊ฐ์ฒด) ์ ๋ฒํธ๊ฐ ๋ ์๋ค๋ฉด ์์๋ฅผ ๋ฐํํ์ฌ ๋ ๊ฐ์ฒด์ ์์น๋ฅผ ๋ฐ๊พธ๋๋ก ๊ตฌํํ ๊ฒ์ด๋ค.
์ถ๋ ฅํ๋ฉด์ ๋ณด๋ฉด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Comparator ๊ตฌํํ๊ธฐ
Comparator
๋ ์๋ก์ด ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
๋ํ์ ์ผ๋ก๋ ๋ด๋ฆผ์ฐจ์์ด ์๊ฒ ๋ค.
Collections.sort()
๋ ๋งค๊ฐ๋ณ์ 1๊ฐ๋ง ๋ฃ์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์์ ํด์ฃผ์ง๋ง,
Collections.sort(Object[] a, Comparator c)
์ ๊ฐ์ด ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก Comparator
๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๊ตฌํํ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ๋ ฌ์ ํ๊ฒ ๋๋ค.
์์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ Comparator
์ด๋ค.
๋ฐ๋ผ์ compare
๋ฉ์๋์ return ๊ฐ์ -1์ ๊ณฑํด์ค๋ค๋ฉด, ์๋ compare
๋ฉ์๋์ ๋ฐ๋๋ก ๋์ํ ๊ฒ์ด๋ค.
compare
๋ฐํ๊ฐ์ -1์ ๊ณฑํ๋๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ๋์๋ค.
๊ฒฐ๋ก ์ ์์๊ฐ์ด ๋ฆฌํด๋๋ฉด ๋ ๊ฐ์ฒด์ ์์น๋ฅผ ๋ฐ๊พธ๋๋ก ๋์ด์์ผ๋,
์ฐ๋ฆฌ๊ฐ Comparable
์ด๋ Comparator
๋ฅผ ๊ตฌํํ์ฌ ์ค๋ฒ๋ผ์ด๋ฉํ ๋ค์ ์ ์ ํ ์กฐ๊ฑด์์ ๋ฃ์ด์,
์กฐ๊ฑด๋ฌธ์ ํตํด ํด๋น ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์์๊ฐ์ ๋ฆฌํดํ๋๋ก ํ๋ฉด, ์ด๋ค ์กฐ๊ฑด์์ด ์จ์๋ ์์น๋ฅผ ๋ฐ๊พธ๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ํ๋ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ์ ํ ์ ์๋ ๊ฒ์ด๋ค!