Comparable vs Comparator

  • Comparable interface

    • ์ •๋ ฌ ๊ธฐ์ค€์„ ์ •์˜ํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜.

    • ์ •๋ ฌ ๋Œ€์ƒ ํด๋ž˜์Šค๋ฅผ ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ๋ณ€๊ฒฝ.

    • Comparable ์ธํ„ฐํŽ˜์ด์Šค์˜ compareTo() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ, ์ธ์ž๋กœ ๋„˜์–ด์˜จ ๊ฐ™์€ ํƒ€์ž…์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ๋Œ€์†Œ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅ.

    • return ๊ฐ’์œผ๋กœ Integer.compare(a, b), Double.compare(a,b) ๋“ฑ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๋ฐ, Integer.compare ํ•จ์ˆ˜์›ํ˜•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

      public static int compare(int x, int y){
          return (x>y) ? -1 : ((x==y)? 0 : 1);
      }
    • Integer.compare()์€ ๋‹จ์ˆœํžˆ ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์˜ค๋ฆ„์ฐจ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋น„๊ตํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

    • ์ •๋ ฌ์ด ์ง„ํ–‰ ๋  ๋•Œ, ์ž๋ฆฌ๋ฐ”๊ฟˆ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , return ๊ฐ’์ด ์–‘์ˆ˜์ผ ๋Œ€ ์ž๋ฆฌ๋ฐ”๊ฟˆ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

    • ๋‚ด๋ฆผ์ฐจ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” compare(int y , int x)๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆœ์„œ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด๋œ๋‹ค.

    • ์˜ˆ์ œ

      //์˜ค๋ฆ„์ฐจ
      class A implements Comparable <A> {
          int x;
          A(int x){
              this.x = x;
          }
          public int compareTo(A other){
              return Integer.compare(this.x, other.x);
          }
      }
    • Integer.compare() ๋Œ€์‹  ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋„ ๋œ๋‹ค.

    • ์˜ˆ์ œ

      //์˜ค๋ฆ„์ฐจ
      class A implements Comparable<A>{
          int x;
          public int compareTo(A other){
              //์–‘์ˆ˜์ผ ๊ฒฝ์šฐ์—๋งŒ ์ž๋ฆฌ ๋ฐ”๊ฟˆ
              return this.x - other.x;
          }
      }
      //๋‚ด๋ฆผ์ฐจ
      class A implements Comparable<A>{
          int x;
          public int compareTo(A other){
              return other.x - this.x;
          }
      }
  • Comparator

    • ์ •๋ ฌ ๋Œ€์ƒ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ

    • ํ˜น์€ ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ์ฒด์— ์ด๋ฏธ ์กด์žฌํ•˜๊ณ ์žˆ๋Š” ์ •๋ ฌ ๊ธฐ์ค€๊ณผ ๋‹ค๋ฅธ ์ •๋ ฌ ๊ธฐ์ค€์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ.

    • Arrays.sort(), Collections.sort()์™€ ๊ฐ™์€ ์ •๋ ฌ ๋ฉ”์„œ๋“œ์˜ ์ถ”๊ฐ€ ์ธ์ž๋กœ ์‚ฌ์šฉํ•ด์„œ ์ •๋ ฌ๊ธฐ์ค€์„ ๋ˆ„๋ฝ๋œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋‚˜, ๊ธฐ์กด์˜ ์ •๋ ฌ ๊ธฐ์ค€์„ ๋ฌด์‹œํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ •๋ ฌ ๊ธฐ์ค€์œผ๋กœ ๊ฐ์ฒด ์ •๋ ฌ์ด ๊ฐ€๋Šฅ.

    • ์˜ˆ์‹œ(Programmers, ๊ฐ€์žฅ ํฐ ์ˆ˜ ๋ฌธ์ œ์—์„œ ๊ฐ€์ ธ์˜ด.)

      Arrays.sort(numStr, new Comparator<String>() {
                  @Override
                  public int compare(String a, String b) {
                      //์—ฌ๊ธฐ์„œ compareTo๋Š” String์ด ๊ฐ€์ง„ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ
                      return (a+b).compareTo(b+a);
                  }
              });
    • ๊ธฐ๋ณธ ์ •๋ ฌ ๊ธฐ์ค€๊ณผ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ์ •๋ ฌ ๊ธฐ์ค€์„ ์„ธ์šธ ๋•Œ ์‚ฌ์šฉ. ์ฃผ๋กœ ์ต๋ช… ํด๋ž˜์Šค.

  • ์ถ”๊ฐ€

    • ๋žŒ๋‹ค์‹์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ (js์—์„œ ํ•จ์ˆ˜ํ˜•์— ์ต์ˆ™ํ•ด์ ธ์„œ, ์ฝ๊ธฐ ํŽธํ–ˆ๋‹ค!!)

    • Arrays.sort(numStr, (a, b) -> (b+a).compareTo(a + b));

์ฐธ์กฐ ๋งํฌ

https://m.blog.naver.com/occidere/220918234464

https://www.daleseo.com/java-comparable-comparator/

Last updated