7.2.5 가변 길이 배열 입력매개변수 메서드

jh·2022년 1월 30일
0

Do it! 자바 완전 정복

목록 보기
63/70

앞에서 메서드 시그니처는 입력매개변수의 개수 또는 입력매개변수의 자료형에 따라 구분된다고 했다. 만일 어떤 메서드가 입력매개변수로 0~10개 사이의 int 자료형 값을 받는다고 가정하자. 정확히 몇 개의 입력이 들어올지 모르므로 0 ~ 10개, 즉 11개의 메서드를 모두 오버로딩 해야 한다. 만일 전달되는 입력매개변수의 개수 범위가 더 크면 더 많은 메서드를 오버로딩해야한다. 이를 간단하게 할 수 있는 방법이 가변 길이 배열 입력매개변수다. 개수가 정해지지 않은 가변 길이의 압력을 받는 입력매개변수로 입력된 값들은 배열로 저장된다. 그리고 이 배열의 크기는 함수가 호출될 때 전달된 입력값의 개수로 정해진다. 배열 자체가 1개의 자료형만 묶어 저장할 수 있으므로 입력되는 모든 값은 당연히 같은 자료형이어야 한다. 가변 길이 배열 입력매개변수의 문법은 다음과 같다.

🐬가변 길이 배열 입력매개변수

리턴 타입 메서드명 (자료형... 참조 변수명) {
...
}

자료형 다음에 말줄임표(...)가 있는 것이 조금 특이하다. 이를 활용한 예를 살펴보자.

🐬가변 길이 배열 입력매개변수를 활용한 메서드의 호출 예

public class jh {
    public static void main(String[] args) {
        // 가변 길이 int 배열 입력매개변수
        method1(1, 2); // 입력매개변수 길이 : 2
        method1(1, 2, 3); // 입력매개변수 길이 : 3
        method1(); //입력매개변수 길이 : 0

        // 가변 길이 String 배열 입력매개변수
        method2("안녕","방가"); // 입력매개변수 길이 : 2
        method2("땡큐","베리","감사"); // 입력매개변수 길이 : 3
        method2(); // 입력매개변수 길이 : 0
    }
    public static void method1(int...values){
        System.out.println("입력매개변수 길이 : " + values.length);
        for (int i = 0; i < values.length; i++)
            System.out.print(values[i] + " ");
        System.out.println();
    }
    public static void method2(String...values){
        System.out.println("입력매개변수 길이 : " + values.length);
        for (int i = 0; i < values.length; i++)
            System.out.print(values[i] + " ");
        System.out.println();
    }
}

method1(int... values)는 개수와 상관없이 정수를 입력을 받을 수 있고, method2(String... values)는 개수와 상관없이 문자열을 입력으로 받을 수 있다. 이 두 메서드를 호출할 때 입력매개변수로 각각 2개, 3개, 0개를 넘겼다. 오버로딩만 상관했다면 적어도 3개의 메서드 오버로딩을 수행해야 하고, 입력매개변수의 개수가 좀 더 다양하다면 그만큼 오버로딩을 더 많이 수행해야 한다. 하지만 가변 길이 배열 입력매개변수를 사용하면 단 1개의 메서드만 정의해 위의 모든 메서드 호출에 대응할 수 있게 된다. 대부분의 문법이 그렇듯이 메서드 오버로딩의 불편함을 덜고자 만들어진 문법이 가변 길이 배열 입력매개변수이고 사용하다보면 충분히 그런 불편함을 해소해 준다는 걸 느낄 수 있을 것이다.

실습

public class jh {
    public static void main(String[] args) {
        // 가변 길이 int 배열 입력매개변수
        method1(1, 2); // 입력매개변수 길이 : 2
        method1(1, 2, 3); // 입력매개변수 길이 : 3
        method1(); //입력매개변수 길이 : 0

        // 가변 길이 String 배열 입력매개변수
        method2("안녕", "방가"); // 입력매개변수 길이 : 2
        method2("땡큐", "베리", "감사"); // 입력매개변수 길이 : 3
        method2(); // 입력매개변수 길이 : 0
    }

    public static void method1(int... values) {
        System.out.println("입력매개변수 길이 : " + values.length);
        /*배열 출력 방법1
        for (int i = 0; i < values.length; i++)
            System.out.print(values[i] + " ");
        System.out.println();
    }*/
        //배열 출력 방법2
        for (int k : values) {
            System.out.print(k + " ");
        }
        /*배열 출력 방법3
        System.out.println(Arrays.toString(values));
         */
        System.out.println();
    }

    public static void method2(String... values) {
        System.out.println("입력매개변수 길이 : " + values.length);
                /*배열 출력 방법1
        for (int i = 0; i < values.length; i++)
            System.out.print(values[i] + " ");
        System.out.println();
    }*/
        //배열 출력 방법2
        for (String k : values) {
            System.out.print(k + " ");
        }
        /*배열 출력 방법3
        System.out.println(Arrays.toString(values));
         */
        System.out.println();

    }
}

결과

profile
코딩 공부 중...

0개의 댓글