Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Comparator ์™€ Comparable์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ

Table of contents

  1. Collections.sort()
  2. Comparable ๊ตฌํ˜„ํ•˜๊ธฐ
  3. Comparator ๊ตฌํ˜„ํ•˜๊ธฐ

Collections.sort()


image-20221018173441982

๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ 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 ๊ตฌํ˜„ํ•˜๊ธฐ


image-20221018173511692

์œ„ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” Student ๊ฐ์ฒด์•ˆ์— name ๊ณผ no ๋‘๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜๊ณ , ์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์„ ํ• ์ง€ ์ œ๊ณตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Comparable ์„ implements ํ•˜์˜€๋‹ค.

๊ทธ๋ฆฌ๊ณ  compareTo() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜์˜€๋Š”๋ฐ, ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋’ค์— ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด, ๋’ค์—์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ธฐ์ค€์„ ์„ธ์šฐ๊ณ  ๊ทธ ๊ธฐ์ค€์„ ๋งŒ์กฑํ–ˆ์„ ๋•Œ 1์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ๋” ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

์œ„ ์˜ˆ์‹œ์—์„œ๋Š” .no๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ์ฒด(๋’ค์—์žˆ๋Š” ๊ฐ์ฒด) ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋” ์ž‘๋‹ค๋ฉด ์–‘์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋‘ ๊ฐ์ฒด์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋„๋ก ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

์ถœ๋ ฅํ™”๋ฉด์„ ๋ณด๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


Comparator ๊ตฌํ˜„ํ•˜๊ธฐ


Comparator๋Š” ์ƒˆ๋กœ์šด ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์ด ์žˆ๊ฒ ๋‹ค.

Collections.sort() ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ 1๊ฐœ๋งŒ ๋„ฃ์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์„ ํ•ด์ฃผ์ง€๋งŒ,

Collections.sort(Object[] a, Comparator c) ์™€ ๊ฐ™์ด ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Comparator๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๊ตฌํ˜„ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

image-20221018173529715

์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„๋œ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์˜ Comparator์ด๋‹ค.

๋”ฐ๋ผ์„œ compare ๋ฉ”์„œ๋“œ์˜ return ๊ฐ’์— -1์„ ๊ณฑํ•ด์ค€๋‹ค๋ฉด, ์›๋ž˜ compare ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜๋Œ€๋กœ ๋™์ž‘ํ•  ๊ฒƒ์ด๋‹ค.

image-20221018173543307

compare ๋ฐ˜ํ™˜๊ฐ’์— -1์„ ๊ณฑํ–ˆ๋”๋‹ˆ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ๋˜์—ˆ๋‹ค.

image-20221018173606297

๊ฒฐ๋ก ์€ ์–‘์ˆ˜๊ฐ’์ด ๋ฆฌํ„ด๋˜๋ฉด ๋‘ ๊ฐ์ฒด์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋„๋ก ๋˜์–ด์žˆ์œผ๋‹ˆ,


์šฐ๋ฆฌ๊ฐ€ Comparable์ด๋‚˜ Comparator ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ๋‹ค์Œ ์ ์ ˆํ•œ ์กฐ๊ฑด์‹์„ ๋„ฃ์–ด์„œ,


์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ์–‘์ˆ˜๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋„๋ก ํ•˜๋ฉด, ์–ด๋–ค ์กฐ๊ฑด์‹์ด ์จ์žˆ๋“  ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ฒŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค!