๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java] ์ž์—ฐ ์ˆœ์„œ Natural Ordering

์ถœ์ฒ˜

ChatGPT


์ž์—ฐ ์ˆœ์„œ(Natural Ordering)๋Š” ์ž๋ฐ”์—์„œ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ์ˆœ์„œ๋Š” ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๋Š” ๋‚ด์žฌ๋œ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค. 

 

1. ์ž์—ฐ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋Š” ํด๋ž˜์Šค

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ์ž์—ฐ ์ˆœ์„œ๋ฅผ ์ •์˜ํ•œ๋‹ค.

Integer, Double ๋“ฑ ์ˆซ์žํ˜• ํด๋ž˜์Šค

์ˆซ์ž์˜ ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 1,2,3 ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

String

์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์ •๋ ฌ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "apple" < "banana" < "cherry".

Character

์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’ ์ˆœ์„œ๋กœ ์ •๋ ฌ๋œ๋‹ค.

 

2.  ์ž์—ฐ ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ

TreeMap๊ณผ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ‚ค์˜ ์ž์—ฐ ์ˆœ์„œ๋ฅด ๋”ฐ๋ฅธ๋‹ค.

import java.util.TreeMap;

public class NaturalOrderingExample {
    public static void main(String[] args) {
        TreeMap<String, Integer> map = new TreeMap<>();
        
        map.put("banana", 20);
        map.put("apple", 10);
        map.put("cherry", 30);
        
        System.out.println(map);
    }
}

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

{apple=10, banana=20, cherry=30}

 

์—ฌ๊ธฐ์„œ TreeMap์€ ํ‚ค๊ฐ€ String ํƒ€์ž…์ด๋ฉฐ, ์ž์—ฐ ์ˆœ์„œ์— ๋”ฐ๋ผ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์ •๋ ฌ๋œ๋‹ค.

 

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

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

๋‚ด๊ฐ€ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ž์—ฐ ์ˆœ์„œ๋ฅผ ๋‚ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ.

 

์˜ˆ๋ฅผ ๋“ค์–ด, String ํด๋ž˜์Šค๋Š” Comparable<String>์„ ๊ตฌํ˜„ํ•˜๊ณ , compareTo() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•œ๋‹ค.

public class String implements Comparable<String> {
    public int compareTo(String anotherString) {
        // ๋ฌธ์ž์—ด์„ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์— ๋”ฐ๋ผ ๋น„๊ต
    }
}

 

4. ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด์—์„œ ์ž์—ฐ ์ˆœ์„œ ์ •์˜

์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค๊ฐ€ ์ž์—ฐ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด์„œ๋Š” Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

class Person implements Comparable<Person> {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ต
    @Override
    public int compareTo(Person other) {
        return Integer.compare(this.age, other.age);
    }

    @Override
    public String toString() {
        return name + ": " + age;
    }
}

public class NaturalOrderingPersonExample {
    public static void main(String[] args) {
        TreeSet<Person> set = new TreeSet<>();
        set.add(new Person("Alice", 30));
        set.add(new Person("Bob", 25));
        set.add(new Person("Charlie", 35));

        System.out.println(set);
    }
}

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ

[Bob: 25, Alice: 30, Charlie: 35]

 

์œ„ ์˜ˆ์‹œ์—์„œ Person ๊ฐ์ฒด๋Š” ๋‚˜์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜๋ฉฐ, TreeSet์€ ์ž์—ฐ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

Person์˜ ์ž์—ฐ ์ˆœ์„œ๊ฐ€ ๋‚˜์ด์ธ ๊ฒƒ.

 

๊ฒฐ๋ก 

์ž์—ฐ ์ˆœ์„œ(Natural Ordering)๋Š” Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ์ž๋ฐ”์˜ TreeMap, TreeSet๊ณผ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค ๊ฐ„์— ์ผ๊ด€๋œ ๋น„๊ต ๋ฐ ์ •๋ ฌ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

'๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] TreeMap ๊ตฌํ˜„  (0) 2024.09.14
[Java] NavigableMap  (0) 2024.09.14
[Java] SortedMap  (0) 2024.09.11
[Java] HashMap ๊ตฌํ˜„  (0) 2024.09.11
[Java] Hashtable์€ Enumeration ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.  (0) 2024.09.11