1. ์ธํ„ฐํŽ˜์ด์Šค

๋žŒ๋‹ค ํ•จ์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ ์„ ๊ธฐ์–ตํ•ฉ์‹œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค ๋Š” ํด๋ž˜์Šค ๊ฐœ๋…์˜ ๋ณ€ํ˜•์ž…๋‹ˆ๋‹ค. ์‹ฌํ•˜๊ฒŒ ์ž˜๋ฆฐ ํด๋ž˜์Šค๋ผ๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ž์ฒด ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์ •์  ๋ณ€์ˆ˜ ์ œ์™ธ). ์œ ํ˜•์ด ์ธํ„ฐํŽ˜์ด์Šค์ธ ๊ฐ์ฒด๋„ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ:

interface Runnable
{
   void run();
}
ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์˜ˆ

์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”? ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒ์†๊ณผ ํ•จ๊ป˜๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜ํ•ด ์ƒ์†๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋งํ–ˆ๋“ฏ์ด โ€” ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค .

ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜ํ•ด ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

interface Runnable
{
   void run();
}

class Timer implements Runnable
{
   void run()
   {
      System.out.println(LocalTime.now());
   }
}

class Calendar implements Runnable
{
   void run()
   {
      var date = LocalDate.now();
      System.out.println("Today: " + date.getDayOfWeek());
   }
}

ํด๋ž˜์Šค ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ Timer๊ตฌํ˜„ํ•˜๋ฏ€๋กœ ์ธํ„ฐํŽ˜์ด์Šค Runnable์— ์žˆ๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ๋‚ด๋ถ€์—์„œ ์„ ์–ธ Runnableํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฉ”์„œ๋“œ ๋ณธ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์—…๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค Calendar.

๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ Runnable๋ณ€์ˆ˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Runnable.

์˜ˆ:

์•”ํ˜ธ ๋ฉ”๋ชจ
Timer timer = new Timer();
timer.run();

Runnable r1 = new Timer();
r1.run();

Runnable r2 = new Calendar();
r2.run();

run()ํด๋ž˜์Šค ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ Timer๋ฉ๋‹ˆ๋‹ค ํด๋ž˜์Šค ์˜ ๋ฉ”์„œ๋“œ๊ฐ€


ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค ํด๋ž˜์Šค ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค run()Timer


run()Calendar

ํ•ด๋‹น ์œ ํ˜•์ด ๊ฐœ์ฒด์˜ ์กฐ์ƒ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์ธ ํ•œ ํ•ญ์ƒ ๋ชจ๋“  ์œ ํ˜•์˜ ๋ณ€์ˆ˜์— ๊ฐœ์ฒด ์ฐธ์กฐ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Timer๋ฐ ํด๋ž˜์Šค ์˜ ๊ฒฝ์šฐ ๋ฐ ์™€ Calendar๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค .ObjectRunnable

๊ฐœ์ฒด ์ฐธ์กฐ๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ํด๋ž˜์Šค Object์—์„œ ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Object. ๊ทธ๋ฆฌ๊ณ  ๊ฐœ์ฒด ์ฐธ์กฐ๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด Runnableํ•ด๋‹น ์œ ํ˜•์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Runnable.

์˜ˆ 2:

ArrayList<Runnable> list = new ArrayList<Runnable>();
list.add (new Timer());
list.add (new Calendar());

for (Runnable element: list)
    element.run();

Timer์ด ์ฝ”๋“œ๋Š” ๋ฐ Calendar๊ฐœ์ฒด์— ์™„๋ฒฝํ•˜๊ฒŒ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์‹คํ–‰ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค . ๋”ฐ๋ผ์„œ ๊ทธ๋“ค์„ ๋ถ€๋ฅด๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ๋‘ ํด๋ž˜์Šค์— run() ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‘ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Runnable์ธํ„ฐํŽ˜์ด์Šค๋Š” run ๋ฉ”์„œ๋“œ๋ฅผ ๋„ฃ๋Š” ๊ณณ์œผ๋กœ๋งŒ โ€‹โ€‹์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.



2. ๋ถ„๋ฅ˜

์ข€ ๋” ์‹ค์šฉ์ ์ธ ๊ฒƒ์œผ๋กœ ๋„˜์–ด ๊ฐ‘์‹œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์ž์—ด ์ •๋ ฌ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ๋ชจ์Œ์„ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด Java์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ›Œ๋ฅญํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.Collections.sort(collection);

์ด ์ •์  ๋ฉ”์„œ๋“œ๋Š” ์ „๋‹ฌ๋œ ์ปฌ๋ ‰์…˜์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •๋ ฌ ๊ณผ์ •์—์„œ ์š”์†Œ๋ฅผ ๊ต์ฒดํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์š”์†Œ์˜ ์Œ๋ณ„ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

compareTo์ •๋ ฌํ•˜๋Š” ๋™์•ˆ ์ด๋Ÿฌํ•œ ๋น„๊ต๋Š” ๋ชจ๋“  ํ‘œ์ค€ ํด๋ž˜์Šค์— ์žˆ๋Š” ( Integer, String, ... ) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

Integer ํด๋ž˜์Šค์˜ compareTo() ๋ฉ”์„œ๋“œ๋Š” ๋‘ ์ˆซ์ž์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ฐ˜๋ฉด String ํด๋ž˜์Šค์˜ compareTo() ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด์˜ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ˆซ์ž ๋ชจ์Œ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ณ  ๋ฌธ์ž์—ด ๋ชจ์Œ์€ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

๋Œ€์ฒด ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด์„ ์•ŒํŒŒ๋ฒณ์ˆœ์ด ์•„๋‹ˆ๋ผ ๊ธธ์ด์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ˆซ์ž๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ด ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ?

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค์—๋Š” ๋‘ ๊ฐœ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” Collections๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค .sort()

Collections.sort(collection, comparator);

์—ฌ๊ธฐ์„œ comparator๋Š” ์ •๋ ฌ ์ž‘์—… ์ค‘์— ์ปฌ๋ ‰์…˜ ์˜ ๊ฐœ์ฒด๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š” ํŠน์ˆ˜ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค . ๋น„๊ต๊ธฐ๋ผ๋Š” ์šฉ์–ด๋Š” "๋น„๊ตํ•˜๋‹ค"๋ฅผ ์˜๋ฏธํ•˜๋Š” compare ์—์„œ ํŒŒ์ƒ๋œ ์˜์–ด ๋‹จ์–ด comparator ์—์„œ ์œ ๋ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด ํŠน๋ณ„ํ•œ ๋ฌผ๊ฑด์€ ๋ฌด์—‡์ผ๊นŒ์š”?

Comparator์ƒํ˜ธ ์ž‘์šฉ

์Œ, ๋ชจ๋‘ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. sort()๋ฉ”์†Œ๋“œ์˜ ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.Comparator<T>

์—ฌ๊ธฐ์„œ T๋Š” ์ปฌ๋ ‰์…˜ ์— ์žˆ๋Š” ์š”์†Œ์˜ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์œ ํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฉฐ ๋‹จ์ผ ๋ฉ”์†Œ๋“œ๋ฅผ Comparator๊ฐ–๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.int compare(T obj1, T obj2);

์ฆ‰, ๋น„๊ต๊ธฐ ๊ฐœ์ฒด๋Š” Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. Comparator ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

public interface Comparator<Type>
{
   public int compare(Type obj1, Type obj2);
}
Comparator ์ธํ„ฐํŽ˜์ด์Šค ์ฝ”๋“œ

๋ฉ”์„œ๋“œ compare()๋Š” ์ „๋‹ฌ๋œ ๋‘ ์ธ์ˆ˜๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ๊ฐ€ ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด obj1 < obj2. ๋ฉ”์„œ๋“œ๊ฐ€ ์–‘์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด obj1 > obj2. ๋ฉ”์„œ๋“œ๊ฐ€ 0์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด obj1 == obj2.

๋‹ค์Œ์€ ๋ฌธ์ž์—ด์„ ๊ธธ์ด๋กœ ๋น„๊ตํ•˜๋Š” ๋น„๊ต๊ธฐ ๊ฐœ์ฒด์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

public class StringLengthComparator implements Comparator<String>
{
   public int compare (String obj1, String obj2)
   {
      return obj1.length() โ€“ obj2.length();
   }
}
StringLengthComparator์ˆ˜์—… ์ฝ”๋“œ

๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ๋น„๊ตํ•˜๋ ค๋ฉด ํ•œ ๊ธธ์ด์—์„œ ๋‹ค๋ฅธ ๊ธธ์ด๋ฅผ ๋บ๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด์„ ๊ธธ์ด๋ณ„๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public class Solution
{
   public static void main(String[] args)
   {
      ArrayList<String> list = new ArrayList<String>();
      Collections.addAll(list, "Hello", "how's", "life?");
      Collections.sort(list, new StringLengthComparator());
   }
}

class StringLengthComparator implements Comparator<String>
{
   public int compare (String obj1, String obj2)
   {
      return obj1.length() โ€“ obj2.length();
   }
}
๋ฌธ์ž์—ด์„ ๊ธธ์ด๋ณ„๋กœ ์ •๋ ฌ


3. ๊ตฌ๋ฌธ ์„คํƒ•

์ด ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ผ์ธ์€ ๋‹จ ํ•˜๋‚˜๋ฟ์ž…๋‹ˆ๋‹ค โ€” obj1.length() - obj2.length();.

๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ๋Š” ๋ฉ”์„œ๋“œ ์™ธ๋ถ€์— ์กด์žฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ๊ณ  compare()๋ฉ”์„œ๋“œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค โ€” StringLengthComparator. ๊ทธ๋ฆฌ๊ณ  ๋ณ€์ˆ˜์˜ ์œ ํ˜•๋„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค... ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ์ฝ”๋“œ๋ฅผ ๋” ์งง๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์„ ์œ„ํ•œ ๊ตฌ๋ฌธ ์„คํƒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ตญ์ž!

์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค

๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ๋ฐ”๋กœ ๋น„๊ต๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ main()์žˆ์œผ๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋‚˜๋จธ์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

public class Solution
{
    public static void main(String[] args)
    {
        ArrayList<String> list = new ArrayList<String>();
        Collections.addAll(list, "Hello", "how's", "life?");

        Comparator<String> comparator = new Comparator<String>()
        {
            public int compare (String obj1, String obj2)
            {
                return obj1.length() โ€“ obj2.length();
            }
        };

        Collections.sort(list, comparator);
    }
}
๋ฌธ์ž์—ด์„ ๊ธธ์ด์ˆœ์œผ๋กœ ์ •๋ ฌ

Comparator๋ช…์‹œ์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ! ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์ž„์‹œ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ตํ•ด๋ณด์ž:

Comparator<String> comparator = new Comparator<String>()
{
    public int compare (String obj1, String obj2)
    {
        return obj1.length() โ€“ obj2.length();
    }
};
์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค
Comparator<String> comparator = new StringLengthComparator();

class StringLengthComparator implements Comparator<String>
{
    public int compare (String obj1, String obj2)
    {
        return obj1.length() โ€“ obj2.length();
    }
}
StringLengthComparator์ˆ˜์—…

๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์— ๋™์ผํ•œ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ ์ƒ‰์ƒ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์ฐจ์ด๋Š” ์‹ค์ œ๋กœ ์•„์ฃผ ์ž‘์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹นํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ์ฝ”๋“œ ๋ธ”๋ก์„ ์ƒ์„ฑํ•˜๊ณ  ํด๋ž˜์Šค์— ์ž„์˜์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.


4. Java์˜ ๋žŒ๋‹ค ์‹

์ฝ”๋“œ์—์„œ ์ต๋ช…์˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ๋ธ”๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Comparator<String> comparator = new Comparator<String>()
{
    public int compare (String obj1, String obj2)
    {
        return obj1.length() โ€“ obj2.length();
    }
};
์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค

์—ฌ๊ธฐ์„œ๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ์ต๋ช… ํด๋ž˜์Šค ์ƒ์„ฑ์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ์ฝ”๋“œ๋ฅผ ๋” ์งง๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Comparator<String> comparator = (String obj1, String obj2) ->
{
    return obj1.length() โ€“ obj2.length();
};

์—ฌ๊ธฐ์—๋Š” ์•”์‹œ์  ํด๋ž˜์Šค ์„ ์–ธ๋ฟ ์•„๋‹ˆ๋ผ ๋ณ€์ˆ˜ ์ƒ์„ฑ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ธ๋ฏธ์ฝœ๋ก ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์€ ํ‘œ๊ธฐ๋ฒ•์„ ๋žŒ๋‹ค ์‹์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค .

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ์—์„œ ์ด์™€ ๊ฐ™์€ ํ‘œ๊ธฐ๋ฒ•์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ต๋ช…์˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์„ธํ•œ ๋ฒ„์ „์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋žŒ๋‹ค ์‹์„ ์ž‘์„ฑํ•  ๋•Œ ํด๋ž˜์Šค ์ด๋ฆ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฉ”์„œ๋“œ ์ด๋ฆ„๋„ ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค .Comparator<String>int compare()

์ปดํŒŒ์ผ์€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค . ๋žŒ๋‹ค ์‹์€ ๋‹จ์ผ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค . ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ด ๊ทœ์น™์„ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ OOP๋ฅผ ๋” ๊นŠ์ด ์—ฐ๊ตฌํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

์ž์„ธํ•œ ๋ฒ„์ „์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋žŒ๋‹ค ์‹์„ ์ž‘์„ฑํ•  ๋•Œ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Comparator<String> comparator = new Comparator<String>()
{
    public int compare (String obj1, String obj2)
   {
      return obj1.length() โ€“ obj2.length();
   }
};
์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค

์ค‘์š”ํ•œ ๊ฑด ํ•˜๋‚˜๋„ ๋น ๋œจ๋ฆฌ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค. ์‹ค์ œ๋กœ Comparator์ธํ„ฐํŽ˜์ด์Šค์— ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ compare()์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‚˜๋จธ์ง€ ์ฝ”๋“œ์—์„œ ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ์ฝ”๋“œ๋ฅผ ์™„์ „ํžˆ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ ฌ

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Comparator<String> comparator = (String obj1, String obj2) ->
{
   return obj1.length() โ€“ obj2.length();
};
Collections.sort(list, comparator);

๋˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Collections.sort(list, (String obj1, String obj2) ->
   {
      return obj1.length() โ€“ obj2.length();
   }
);

comparator๋ณ€์ˆ˜ ์— ํ• ๋‹น๋œ ๊ฐ’์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์ฆ‰์‹œ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค comparator.

์œ ํ˜• ์ถ”๋ก 

ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ๋‹ค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์˜ ์ฝ”๋“œ๋Š” ํ›จ์”ฌ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” obj1๋ฐ obj2๋ณ€์ˆ˜๊ฐ€ Strings. ๋‘˜์งธ, ๋ฉ”์„œ๋“œ ์ฝ”๋“œ์— ๋ช…๋ น์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ์ค‘๊ด„ํ˜ธ์™€ return ๋ฌธ๋„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ถ• ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Comparator<String> comparator = (obj1, obj2) ->
   obj1.length() โ€“ obj2.length();

Collections.sort(list, comparator);

๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  comparatorํ•ด๋‹น ๊ฐ’์„ ์ฆ‰์‹œ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ ๋ฒ„์ „์„ ์–ป์Šต๋‹ˆ๋‹ค.

Collections.sort(list, (obj1, obj2) ->  obj1.length() โ€” obj2.length() );

๊ธ€์Ž„, ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”? ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” ๋‹จ ํ•œ ์ค„์˜ ์ฝ”๋“œ โ€” ๋ณ€์ˆ˜์™€ ์ฝ”๋“œ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ์งง๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค! ์•„๋‹ˆ๋ฉด ์žˆ์Šต๋‹ˆ๊นŒ?



5. ์ž‘๋™ ๋ฐฉ์‹

์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ผ ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ์ธํ„ฐํŽ˜์ด์Šค ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๋žŒ๋‹ค ์‹์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

์˜ˆ๋ฅผ ๋“ค์–ด ์ฝ”๋“œ์—์„œ ๋ฉ”์†Œ๋“œ์˜ ์„œ๋ช…์ด ๋‹ค์Œ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋žŒ๋‹ค ํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .Collections.sort(list, (obj1, obj2) -> obj1.length() - obj2.length());sort()

sort(Collection<T> colls, Comparator<T> comp)

์ฝœ๋ ‰์…˜์„ ์ •๋ ฌ ๋ฉ”์†Œ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ–ˆ์„ ๋•Œ ArrayList<String>์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ์œ ํ˜•์ด ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹จ์ผ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.Comparator<String>int compare(String obj1, String obj2)