코딩항해기

[JAVA] 가변인자 본문

JAVA

[JAVA] 가변인자

miniBcake 2024. 10. 20. 12:55

 

가변인자 Variable Arguments (...)

가변인자는 메서드의 매개변수를 동적으로 처리 할 수 있도록 한다. 가변인자를 사용하면 메서드 호출 시 전달되는 인자의 개수를 동적으로 변경할 수 있다.

 

JDK 1.5부터 사용 가능하다. printf()메서드가 가장 대표적인 예이다.

 

 

가변인자 문법

타입... 변수명

 

가변인자는 매개변수 중에서 제일 마지막에 선언해야한다. 앞쪽에 선언할 경우 컴파일 에러가 발생한다.

 

 

활용 예시

public class Main {
    public static void main(String[] args) {
        System.out.println(concatenate()); // 인자가 없음
        System.out.println(concatenate("jo")); // 인자가 하나
        System.out.println(concatenate("jo", "min", "seo")); // 인자가 셋
        System.out.println(concatenate(new String[] {"A", "B"})); // 인자가 배열
    }

    static String[] concatenate(String... str) {
        return str;
    }
}

 

가변인자는 내부적으로 배열을 사용하는 것으로 가변인자가 선언된 메서드를 호출할 때마다 배열이 새로 생성된다는 비효율적인 측면이 있어 사용에 신중해야한다.

 

그럼 매개변수 타입을 배열로 하면 같은 것이라고 생각될 수도 있는데, 이 경우 반드시 인자를 지정해야해서 생략할 수 없으므로 null이나 길이가 없는 배열을 지정해야하는 문제가 있다.

 

또한 오버로딩할 때도 문제가 될 수 있는데, 가변인자를 사용하다보니 어떤 메서드를 호출하는지 알 수 없는 문제가 발생할 수도 있다. 가능하다면 가변인자를 사용한 메서드는 오버로딩하지 않는 것이 좋다.

 

 

 

참고 블로그 : https://velog.io/@minseojo/Java-%EA%B0%80%EB%B3%80%EC%9D%B8%EC%9E%90-varargs