๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Java/๐Ÿช… ๋ฉ”์„œ๋“œ

[ Java ] compareTo()๋ฅผ ๋ชจ๋ฅด๊ณ  ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ณด๊ฒ ๋‹ค๊ณ ?

by carrot0911 2025. 4. 1.

๐Ÿ’ก ๊ณต๋ถ€ํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•˜๋ ค๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ฒˆ์—๋Š” ์ •๋ ฌ ๋ฌธ์ œ๋ฅผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋˜์—ˆ๊ณ , ๋‚˜๋ฆ„๋Œ€๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ ค๊ณ  ์ƒ๊ฐ์„ ํ•ด๋ดค์ง€๋งŒ ์ „ํ˜€ ์—‰๋šฑํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ •๋ ฌ ๋ฌธ์ œ๋ฅผ ์ž˜ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ด€๋ จ ๊ฐœ๋…๋“ค์„ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ , ๋ฌธ์ œ์—์„œ ์ ์šฉ๋˜์—ˆ๋˜ compareTo() ๋ฉ”์„œ๋“œ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค! 

 


 

๐Ÿค” compareTo(), ์–ด๋–ค ์นœ๊ตฌ์ธ๊ฐ€?!

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

๐Ÿ”ข ์ˆซ์ž๋ฅผ ๋น„๊ตํ•  ๋•Œ
๋‹จ์ˆœํ•˜๊ฒŒ ํฌ๋‹ค / ๊ฐ™๋‹ค / ์ž‘๋‹ค์— ๋”ฐ๋ผ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ๊ฒฐ๊ณผ๊ฐ€ ์–‘์ˆ˜ → ์•ž์˜ ๊ฐ’์ด ๋” ํผ
  • ๊ฒฐ๊ณผ๊ฐ€ 0 → ๋‘ ๊ฐ’์ด ๊ฐ™์Œ
  • ๊ฒฐ๊ณผ๊ฐ€ ์Œ์ˆ˜ → ์•ž์˜ ๊ฐ’์ด ๋” ์ž‘์Œ
System.out.println(5 - 3);      // ๐Ÿ‘‰ 2 (5 > 3)
System.out.println(3 - 3);      // ๐Ÿ‘‰ 0 (3 == 3)
System.out.println(2 - 4);      // ๐Ÿ‘‰ -2 (2 < 4)

๐Ÿ”ค ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•  ๋•Œ
๋ฌธ์ž(ํ˜น์€ ๋ฌธ์ž์—ด)๋Š” ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๋น„๊ต๋œ๋‹ค.

์ด๊ฒŒ ์ข€ ๋” ์žฌ๋ฐŒ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค ๐Ÿ˜Ž

System.out.println("apple".compareTo("banana")); // ๐Ÿ‘‰ ์Œ์ˆ˜ (a < b)
System.out.println("banana".compareTo("apple")); // ๐Ÿ‘‰ ์–‘์ˆ˜ (b > a)
System.out.println("apple".compareTo("apple"));  // ๐Ÿ‘‰ 0 (๊ฐ™์Œ)
  • a๋Š” b๋ณด๋‹ค ์•ž์— ์žˆ์œผ๋‹ˆ๊นŒ  ์Œ์ˆ˜
  • b๋Š” a๋ณด๋‹ค ๋’ค์— ์žˆ์œผ๋‹ˆ๊นŒ → ์–‘์ˆ˜
  • ๊ฐ™์œผ๋ฉด 0 

 

 

๐Ÿ”ข ์ˆซ์žํ˜• ๋น„๊ต: compareTo() ์‹ค์Šต ์˜ˆ์ œ

์ˆซ์žํ˜•๋„ compareTo()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!
๐Ÿ’ก Integer, Double, Long, Float, Byte, Short
๋“ฑ Wrapper ํด๋ž˜์Šค๋ผ๋ฆฌ ๋น„๊ตํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค.

public class CompareToTest {
    public static void main(String[] args) {

        Integer x = 3;
        Integer y = 4;
        Double z = 1.0;

        System.out.println(x.compareTo(y));     // ๐Ÿ‘‰ -1 (3 < 4)
        System.out.println(x.compareTo(3));     // ๐Ÿ‘‰  0 (3 == 3)
        System.out.println(x.compareTo(2));     // ๐Ÿ‘‰  1 (3 > 2)
        System.out.println(z.compareTo(2.7));   // ๐Ÿ‘‰ -1 (1.0 < 2.7)
    }
}

๐Ÿง  ๋ฐ˜ํ™˜๊ฐ’ ๊ทœ์น™

๋น„๊ต ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ๊ฐ’ ์˜๋ฏธ
๊ธฐ์ค€ ๊ฐ’ == ๋น„๊ต ๋Œ€์ƒ 0 ๋‘ ๊ฐ’์ด ๊ฐ™๋‹ค
๊ธฐ์ค€ ๊ฐ’ < ๋น„๊ต ๋Œ€์ƒ ์Œ์ˆ˜ ๊ธฐ์ค€ ๊ฐ’์ด ๋” ์ž‘๋‹ค
๊ธฐ์ค€ ๊ฐ’ > ๋น„๊ต ๋Œ€์ƒ ์–‘์ˆ˜ ๊ธฐ์ค€ ๊ฐ’์ด ๋” ํฌ๋‹ค

๐Ÿ“ŒJava์—์„œ๋Š” ๊ธฐ๋ณธํ˜•(int, double ๋“ฑ)์€ compareTo()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , Wrapper ํด๋ž˜์Šค(Integer, Double ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ๋„ ๊ธฐ์–ตํ•ด ๋‘๋ฉด ์ข‹๋‹ค!

 

 

๐Ÿ”ค ๋ฌธ์žํ˜• ๋น„๊ต: compareTo() ์™„์ „ ์ดํ•ดํ•˜๊ธฐ

๋ฌธ์ž์—ด๋„ ์ˆซ์ž์ฒ˜๋Ÿผ compareTo() ๋ฉ”์„œ๋“œ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค!
ํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด์€ ์‚ฌ์ „ ์ˆœ๊ณผ ASCII์ฝ”๋“œ ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ต๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์กฐ๊ธˆ ๋” ํฅ๋ฏธ๋กญ๊ณ , ์ฃผ์˜ํ•  ์ ๋„ ์žˆ๋‹ค! ๐Ÿ‘€

public class CompareToTest {
    public static void main(String[] args) {

        String str = "abcd";

        // 1๏ธโƒฃ ๋น„๊ต ๋Œ€์ƒ์— ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ
        System.out.println(str.compareTo("abcd"));  // ๐Ÿ‘‰ 0
        System.out.println(str.compareTo("ab"));    // ๐Ÿ‘‰ 2
        System.out.println(str.compareTo("a"));     // ๐Ÿ‘‰ 3
        System.out.println(str.compareTo("c"));     // ๐Ÿ‘‰ -2
        System.out.println("".compareTo(str));      // ๐Ÿ‘‰ -4

        // 2๏ธโƒฃ ๋น„๊ต ๋Œ€์ƒ๊ณผ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ
        System.out.println(str.compareTo("zefd"));  // ๐Ÿ‘‰ -25
        System.out.println(str.compareTo("zEFd"));  // ๐Ÿ‘‰ -25
        System.out.println(str.compareTo("ABCD"));  // ๐Ÿ‘‰ 32
    }
}

1๏ธโƒฃ ํฌํ•จ๋œ ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ: ๊ธธ์ด ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜!

System.out.println(str.compareTo("ab"));   // ๐Ÿ‘‰ 2
System.out.println(str.compareTo("a"));    // ๐Ÿ‘‰ 3
System.out.println("".compareTo(str));     // ๐Ÿ‘‰ -4
  • "abcd"(4๊ธ€์ž)์™€ "ab"(2๊ธ€์ž) → ์ฐจ์ด: 2
  • "abcd"์™€ "a" → 3
  • ""์™€ "abcd" -4

๐Ÿ“Œ๊ธฐ์กด ๋ฌธ์ž์—ด์— ๋น„๊ต ๋ฌธ์ž์—ด์ด ์™„์ „ํžˆ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ฌธ์ž์—ด ๊ธธ์ด ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

โ“ str.compareTo("ab")์˜ ๊ฒฐ๊ณผ ๊ฐ’์ด 2๊ฐ€ ๋‚˜์˜ค๋Š” ์ด์œ ๋Š”?!

"c"๋Š” "abcd"์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‹ˆ ๊ธธ์ด ์ฐจ์ด์ธ 3์ด ๋‚˜์™€์•ผ ํ•˜์ง€ ์•Š์„๊นŒ...? ๐Ÿค”
ํ•˜์ง€๋งŒ compareTo()๋Š” ์•ž์—์„œ๋ถ€ํ„ฐ ํ•œ ๊ธ€์ž์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ๋น„๊ตํ•ด์„œ ๋‹ค๋ฅธ ๋ฌธ์ž๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ์ˆœ๊ฐ„, ๊ทธ ์ž๋ฆฌ์˜ ASCII์ฝ”๋“œ ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค!

"abcd"
  โ–ฒ a = 97
"c"
  โ–ฒ c = 99
  • 97 - 99 = -2

๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ๋Š” -2!

2๏ธโƒฃ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๋Š” ๊ฒฝ์šฐ

System.out.println(str.compareTo("zefd"));   // ๐Ÿ‘‰ -25
System.out.println(str.compareTo("ABCD"));   // ๐Ÿ‘‰ 32
  • "a"(97) vs "z"(122) → -25
  • "a"(97) vs "A"(65) → 32

compareTo()๋Š” ๋Œ€์†Œ๋ฌธ์ž๋„ ๊ตฌ๋ถ„ํ•œ๋‹ค!

 

โœจ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์ด ๋น„๊ตํ•˜๋ ค๋ฉด?

str.compareToIgnoreCase("ABCD"); // ๐Ÿ‘‰ 0

compareToIgnoreCase()๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œํ•˜๊ณ  ๋น„๊ตํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค!
๋ฌธ์ž์—ด ๋น„๊ต์—์„œ ์†Œ๋ฌธ์ž vs ๋Œ€๋ฌธ์ž ํ—ท๊ฐˆ๋ฆด ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค!

๐Ÿง  ๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ

์ƒํ™ฉ ๊ฒฐ๊ณผ ๊ธฐ์ค€ ๋ฐ˜ํ™˜๊ฐ’ ์˜ˆ์‹œ
๋ฌธ์ž ๋™์ผ ๊ฐ™์Œ 0
์•ž์ด ์ž‘์Œ ASCII ๊ธฐ์ค€ ์Œ์ˆ˜
์•ž์ด ํผ ASCII ๊ธฐ์ค€ ์–‘์ˆ˜
๋น„๊ต๋ฌธ์ž ํฌํ•จ๋จ ๊ธธ์ด ์ฐจ์ด์ฒ˜๋Ÿผ ๋ณด์ž„ ์–‘์ˆ˜/์Œ์ˆ˜

 


๐Ÿ”— References

https://mine-it-record.tistory.com/133

 

[JAVA] ์ž๋ฐ”_compareTo ( ๊ฐ’ [๋ฌธ์ž์—ด/์ˆซ์ž] ๋น„๊ต )

compareTo() - int compareTo(NumberSubClass referenceName) - int compareTo(String anotherString) - compareTo() ํ•จ์ˆ˜๋Š” ๋‘๊ฐœ์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ int ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. compareTo() ํ•จ์ˆ˜์—๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•˜๋Š”๋ฐ”์™€ ๊ฐ™์ด "

mine-it-record.tistory.com