TIL 23.01.10

ν™©μ€ν•˜Β·2024λ…„ 1μ›” 10일
0

TIL

λͺ©λ‘ 보기
143/146

πŸ“ŒToday I Learned

μžλ°”μ—μ„œ μ •λ ¬ν•˜λŠ” 방법

μžλ°” μ–Έμ–΄μ—μ„œλŠ” λ°°μ—΄μ΄λ‚˜ μ»¬λ ‰μ…˜μ„ μ •λ ¬ν•˜λŠ” μ—¬λŸ¬ 가지 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. 주둜 μ‚¬μš©λ˜λŠ” 방법 쀑 λͺ‡ 가지λ₯Ό μ•„λž˜μ— μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.
Arrays.sort() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•œ λ°°μ—΄ μ •λ ¬:

import java.util.Arrays;

public class ArraySortExample {
    public static void main(String[] args) {
        int[] numbers = {5, 2, 8, 1, 6};
        Arrays.sort(numbers);

        System.out.println("μ •λ ¬λœ λ°°μ—΄: " + Arrays.toString(numbers));
    }
}

Collections.sort() λ©”μ„œλ“œλ₯Ό μ΄μš©ν•œ 리슀트 μ •λ ¬:

import java.util.ArrayList;
import java.util.Collections;

public class ListSortExample {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(5);
        numbers.add(2);
        numbers.add(8);
        numbers.add(1);
        numbers.add(6);

        Collections.sort(numbers);

        System.out.println("μ •λ ¬λœ 리슀트: " + numbers);
    }
}

Comparatorλ₯Ό μ΄μš©ν•œ μ‚¬μš©μž μ •μ˜ 객체 μ •λ ¬:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class Person {
    String name;
    int age;

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

public class ObjectSortExample {
    public static void main(String[] args) {
        ArrayList<Person> people = new ArrayList<>();
        people.add(new Person("Alice", 25));
        people.add(new Person("Bob", 30));
        people.add(new Person("Charlie", 22));

        // λ‚˜μ΄λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬
        Collections.sort(people, Comparator.comparingInt(person -> person.age));

        System.out.println("μ •λ ¬λœ 객체 리슀트: " + people);
    }
}

이 외에도 Comparable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ Comparatorλ₯Ό μ‚¬μš©ν•˜λŠ” 방법 등이 μžˆμŠ΅λ‹ˆλ‹€. μ„ νƒν•œ 방법은 데이터 μœ ν˜• 및 μš”κ΅¬ 사항에 따라 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ„Έ 예제의 차이점

μœ„μ˜ μ„Έ μ˜ˆμ œλŠ” 각각 λ°°μ—΄, 리슀트, μ‚¬μš©μž μ •μ˜ 객체λ₯Ό μ •λ ¬ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€. 이 μ˜ˆμ œλ“€ κ°„μ˜ μ£Όμš” 차이점은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

Arrays.sort()λ₯Ό μ΄μš©ν•œ λ°°μ—΄ μ •λ ¬:

Arrays.sort() λ©”μ„œλ“œλŠ” 배열을 μ •λ ¬ν•©λ‹ˆλ‹€.
μ›μ‹œ 데이터 νƒ€μž… λ°°μ—΄ λ˜λŠ” 객체 배열을 λͺ¨λ‘ μ •λ ¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
기본적으둜 μ˜€λ¦„μ°¨μˆœ μ •λ ¬μ΄μ§€λ§Œ, ν•„μš”μ— 따라 Comparatorλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •λ ¬ μˆœμ„œλ₯Ό λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Collections.sort()λ₯Ό μ΄μš©ν•œ 리슀트 μ •λ ¬:

Collections.sort() λ©”μ„œλ“œλŠ” List μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ»¬λ ‰μ…˜μ„ μ •λ ¬ν•©λ‹ˆλ‹€.
객체λ₯Ό μš”μ†Œλ‘œ κ°€μ§€λŠ” 리슀트λ₯Ό μ •λ ¬ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
λ§ˆμ°¬κ°€μ§€λ‘œ μ˜€λ¦„μ°¨μˆœ 정렬이 기본이며, Comparatorλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •λ ¬ μˆœμ„œλ₯Ό λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Comparatorλ₯Ό μ΄μš©ν•œ μ‚¬μš©μž μ •μ˜ 객체 μ •λ ¬:

μ‚¬μš©μž μ •μ˜ 객체λ₯Ό μ •λ ¬ν•˜κΈ° μœ„ν•΄ Comparatorλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
Comparator μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ—¬ 비ꡐ λ‘œμ§μ„ μ •μ˜ν•˜κ±°λ‚˜, λžŒλ‹€ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Collections.sort() λ©”μ„œλ“œλ‚˜ Arrays.sort() λ©”μ„œλ“œμ— Comparatorλ₯Ό μ „λ‹¬ν•˜μ—¬ μ •λ ¬ μˆœμ„œλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 차이점을 톡해 λ‹€μ–‘ν•œ 데이터 μœ ν˜•μ— λŒ€ν•΄ μ μ ˆν•œ μ •λ ¬ 방법을 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. 배열은 μ›μ‹œ 데이터 νƒ€μž…μ΄λ‚˜ 객체 λͺ¨λ‘μ— λŒ€ν•΄ μ‚¬μš©λ  수 있고, λ¦¬μŠ€νŠΈλŠ” 객체λ₯Ό μš”μ†Œλ‘œ 가진 동적 크기의 μžλ£Œκ΅¬μ‘°μ— μ‚¬μš©λ©λ‹ˆλ‹€. μ‚¬μš©μž μ •μ˜ 객체의 경우 Comparatorλ₯Ό ν™œμš©ν•˜μ—¬ μ •λ ¬ 기쀀을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

Arrays.sort()κ°€ μ›μ‹œ νƒ€μž… 배열에 직접 μ‚¬μš©ν•˜κΈ° μ–΄λ €μš΄ 이유

Arrays.sort()κ°€ μ›μ‹œ νƒ€μž… 배열에 직접 μ‚¬μš©ν•˜κΈ° μ–΄λ €μš΄ μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

Generics의 ν•œκ³„: Javaμ—μ„œ Arrays.sort() λ©”μ„œλ“œλŠ” Genericsλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. GenericsλŠ” μ°Έμ‘° νƒ€μž…μ— λŒ€ν•œ νƒ€μž… μ•ˆμ •μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κΈ°λ³Έ 데이터 νƒ€μž…μ— λŒ€ν•œ GenericsλŠ” μžλ°”μ˜ 섀계상 μ œν•œμ΄ μžˆμŠ΅λ‹ˆλ‹€.

Autoboxingκ³Ό Unboxing의 ν•„μš”: Arrays.sort()λŠ” 배열을 Comparable μΈν„°νŽ˜μ΄μŠ€μ— 따라 μ •λ ¬ν•©λ‹ˆλ‹€. μ›μ‹œ νƒ€μž…μ€ Comparable을 κ΅¬ν˜„ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, μ›μ‹œ νƒ€μž… 배열을 직접 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ›μ‹œ νƒ€μž… 배열을 객체 λ°°μ—΄λ‘œ λ³€ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ Autoboxing (μ›μ‹œ νƒ€μž…μ„ ν•΄λ‹Ήν•˜λŠ” 래퍼 클래슀둜 λ³€ν™˜)κ³Ό Unboxing (래퍼 클래슀λ₯Ό μ›μ‹œ νƒ€μž…μœΌλ‘œ λ³€ν™˜)이 λ°œμƒν•©λ‹ˆλ‹€.

κ°„λ‹¨ν•œ μ˜ˆμ‹œλ‘œ μ„€λͺ…ν•˜λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

int[] primitiveArray = {3, 1, 4, 1, 5};
Arrays.sort(primitiveArray); // 컴파일 였λ₯˜, μ›μ‹œ νƒ€μž… 배열은 Comparable을 κ΅¬ν˜„ν•˜μ§€ μ•ŠμŒ

Integer[] boxedArray = {3, 1, 4, 1, 5};
Arrays.sort(boxedArray); // κ°€λŠ₯, IntegerλŠ” Comparable을 κ΅¬ν˜„ν•˜κ³  있음

νš¨μœ¨μ„±: μ›μ‹œ νƒ€μž…μ€ 객체둜 κ°μ‹ΈλŠ” 과정이 없이 λ©”λͺ¨λ¦¬μ— 직접 값을 μ €μž₯ν•˜λ―€λ‘œ μ„±λŠ₯ λ©΄μ—μ„œ νš¨μœ¨μ μž…λ‹ˆλ‹€. Arrays.sort()μ—μ„œ μ›μ‹œ νƒ€μž…μ„ 직접 μ§€μ›ν•œλ‹€λ©΄, μ΄λŸ¬ν•œ νš¨μœ¨μ„±μ„ λ–¨μ–΄λœ¨λ¦΄ κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ, μ›μ‹œ νƒ€μž… 배열에 λŒ€ν•΄μ„œλŠ” Integer와 같은 래퍼 클래슀둜 λ³€ν™˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 일반적인 μ ‘κ·Ό λ°©λ²•μž…λ‹ˆλ‹€.

profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€