Item 53. Varargs

κ°€λ³€μΈμˆ˜λŠ” μ‹ μ€‘νžˆ μ‚¬μš©ν•˜λΌ

κ°€λ³€μΈμˆ˜ λ©”μ„œλ“œλŠ” λͺ…μ‹œν•œ νƒ€μž…μ˜ 인수λ₯Ό 0개 이상 받을 수 있고, ν˜ΈμΆœν•˜κ²Œ 되면 인수의 개수만큼 배열을 λ§Œλ“€μ–΄μ„œ μΈμˆ˜λ“€μ„ 배열에 μ €μž₯ν•˜μ—¬ λ©”μ„œλ“œμ— μ „λ‹¬ν•œλ‹€. μ—¬κΈ°μ„œ 인수 1개 이상을 λ°›μ•„μ•Όλ§Œ ν•˜λŠ” λ©”μ„œλ“œλŠ” κ°€λ³€μΈμˆ˜λ§Œ μ‚¬μš©ν•˜λ©΄ λŸ°νƒ€μž„ μ‹œμ μ— 였λ₯˜κ°€ λ°œμƒν•  수 μžˆλ‹€.

class Example {

    // 인수 1개 이상을 λ°›μ•„μ•Όλ§Œ ν•˜λŠ” λ©”μ„œλ“œ
    static int min(int... args) {
        if (args.length == 0) {
            throw new IllegalArgumentException("μΈμˆ˜κ°€ 1개 이상 ν•„μš”ν•©λ‹ˆλ‹€.");
        }
        int min = args[0];
        for (int i = 1; i < args.length; i++) {
            if (args[i] < min) {
                min = args[i];
            }
        }
        return min;
    }

    public static void main(String[] args) {
        System.out.println(min()); // λŸ°νƒ€μž„ 였λ₯˜ λ°œμƒ
    }
}

μœ„ μ˜ˆμ‹œμ—μ„œλŠ” μΈμˆ˜κ°€ 1개 이상 ν•„μš”ν•œλ° μΈμˆ˜κ°€ μ—†λŠ” μƒν™©μ—μ„œ ν˜ΈμΆœν•˜κ²Œ 되면 λŸ°νƒ€μž„ 였λ₯˜κ°€ λ°œμƒν•œλ‹€. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„  첫 번째 인수λ₯Ό ν‰λ²ˆν•œ λ§€κ°œλ³€μˆ˜λ‘œ 받도둝 ν•˜λ©΄ λœλ‹€.

class Example {

    // 인수 1개 이상을 λ°›μ•„μ•Όλ§Œ ν•˜λŠ” λ©”μ„œλ“œ
    static int min(int firstArg, int... args) {
        int min = firstArg;
        for (int arg : args) {
            if (arg < min) {
                min = arg;
            }
        }
        return min;
    }
}

μ„±λŠ₯ 문제

κ°€λ³€μΈμˆ˜ λ©”μ„œλ“œλŠ” 호좜될 λ•Œλ§ˆλ‹€ 배열을 μƒˆλ‘œ ν•˜λ‚˜ ν• λ‹Ήν•˜κ³  μ΄ˆκΈ°ν™”ν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯이 μ€‘μš”ν•œ μƒν™©μ—μ„œλŠ” κ°€λ³€μΈμˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€. μ΄λŸ¬ν•œ μ„±λŠ₯ 문제λ₯Ό μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄μ„  일정 κ°œμˆ˜κΉŒμ§€λŠ” 닀쀑 μ •μ˜λ₯Ό ν™œμš©ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆλ‹€.

class Example {

    public void foo() {
    }

    public void foo(int a1) {
    }

    public void foo(int a1, int a2) {
    }

    public void foo(int a1, int a2, int a3) {
    }

    public void foo(int a1, int a2, int a3, int... rest) {
    }
}

λ§Œμ•½ λŒ€λΆ€λΆ„μ˜ 경우 μΈμˆ˜κ°€ 3개 μ΄ν•˜μΌ κ²ƒμœΌλ‘œ μ˜ˆμƒλœλ‹€λ©΄ μœ„μ™€ 같이 닀쀑 μ •μ˜λ₯Ό ν™œμš©ν•˜λ©΄ λΆˆν•„μš”ν•˜κ²Œ 배열을 ν• λ‹Ήν•˜κ³  μ΄ˆκΈ°ν™”ν•˜λŠ” λΉ„μš©μ„ 쀄일 수 μžˆλ‹€.

Last updated