๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Š Java & Kotlin & Spring/- Java & kotlin

[Java ์‹ฌํ™”] Java ์—์„œ Comparable๋กœ ์ •๋ ฌ ๊ธฐ์ค€ ๋ฐ”๊พธ๊ธฐ.

by Wonit 2020. 2. 24.

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

 

์™€ ๊ฐ™์ด ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋Œ“๊ธ€