Java / 가변 길이 인자

해로(haero77)·2022년 7월 14일
0

Java 문법

목록 보기
7/15
post-thumbnail

가변 길이 인자

메서드 오버로딩을 사용하지 않고, 인자의 개수를 다르게 하여 메서드를 호출할수 있도록 선언하는 방법

  • 아래와 같이 test() 메서드를 호출하려면, 매개변수 개수별로 메서드 오버로딩이 되어있어야 호출이 가능할 것이다.
    test(1);
    test(1, 2);
    test(1, 2, 3);
    
    // 각각에 대해 아래처럼 메서드 오버로딩이 되어있어야 위의 코드처럼 호출 가능하다
    void test(int a) {} 
    void test(int a, int b) {}
    void test(int a, int b, int c) {}
  • JDK5부터 같은 타입의 데이터를 전달받는 메서드라면 오버로딩을 사용하지 않고도 인자의 개수를 다르게 호출할 수 있도록 하였는데, 이것이 바로 ‘가변 인자 길이’ 이다.

가변 길이 인자 선언 및 사용

  • 가변 길이 인자 선언

    메서드이름(데이터타입… 변수이름) { }

    • 데이터타입 뒤에 점을 세 개 찍음으로써 가변 길이 인자를 선언한다.
    • 점 세 개는 앞에 선언한 타입으로 배열을 생성하여 가변 길이 인자를 처리하겠다는 의미이다.
  • 선언 예시
    void test(int... v) {
    	System.out.println(v.length);
    }
    • 메서드가 호출되면 int[ ] 배열을 생성하여 인자값(들)을 저장하고, 변수 v로 생성된 배열을 참조한다.
  • 선언 및 사용 예시
public class Test01 {
		// 가변 길이 인자 선언
    static void test(int... v) {
        System.out.print(v.length + " : "); // 배열 v의 길이 출력
        for (int x : v)
            System.out.print(x + " "); // 배열의 원소 출력
        System.out.println(); // 개행
    }

    public static void main(String[] args) {
				// 메서드 호출
        test(1);
        test(1, 2);
        test(1, 2, 3);
    }
}

/* 실행결과 */
1 : 1 
2 : 1 2 
3 : 1 2 3

복합 선언

  • 가변 길이 인자와, 일반 인자를 ‘void test(String name, int... v)’와 같은 형태로 함께 사용할 수 있다.
  • 위 형태로 사용하면, 메서드 호출 시 첫 번째 인자값은 name 매개변수에 저장되고, 두 번째 이후의 인자값들은 v 매개변수가 참조하는 정수형 배열 안에 저장이 된다.
package oj_java.com.ruby.java.ch05;

public class Test02 {
    static void test(String name, int... v) {
        System.out.print(name + " : ");
        for (int x : v)
            System.out.print(x + " ");
        System.out.println();
    }

    public static void main(String[] args) {
        test("오정임", 98, 85, 88);
        test("김푸름", 90, 15, 28);
        test("김하늘", 91, 35, 48);
    }
}

// 실행결과
오정임 : 98 85 88 
김푸름 : 90 15 28 
김하늘 : 91 35 48

가변 길이 인자 사용 시 주의 사항

가변 길이 인자를 사용할 때는 다음 두 가지 사항을 주의하여야 한다.

  1. 가변 길이 인자를 받는 매개변수와 다른 매개변수를 함께 선언할 때는 가변 길이 인자를 받는 매개변수를 맨 마지막에 선언하여야 한다.
    void tset(String name, int... v, double sum) { } // 에러.
    void tset(String name, double suma, int... v) { } // 정상. 가변 길이 인자를 받는 매개변수를 맨 마지막에 선언.
  1. 가변 길이 인자를 받는 매개변수는 한 번만 선언 가능하다.
    void test(String name, int... y, double... ds) { } // 에러. 가변 길이 인자 매개 변수 두 번 선언

📔 본 포스팅은 책 '처음 해보는 자바 프로그래밍(오정임 저)' 를 바탕으로 작성했습니다.

profile
Every Run, Learn Counts.

0개의 댓글