[Java] 가변 개수 인자

벼랑 끝 코딩·2025년 4월 16일
0

Java

목록 보기
33/40

자바 메서드에 ...이 등장하는 것을 본 적이 있을 것이다.
별거 아닌 것 같아 보이면서도 처음에 접했을 때는 대체 이게 뭐지라는 생각을 했다.
이번 포스팅에는 ...의 주인공, 가변 개수 인자에 대해 알아보자.

가변 개수 인자

가변 개수 인자란, 메서드 인자의 개수가 정해지지 않은 경우를 의미한다.

ReturnType methodName(Type... parameterName)

기본 문법 구조는 일반 메서드와 동일하지만,

메서드 파라미터 타입 뒤에 '...'이 붙는다는 차이점이 있다.

public void method(String... names) {
	// 메서드 바디
}

// 위와 동일
public void method(String[] names) {
	// 메서드 바디
}

'...'이 붙은 가변 개수 인자는 타입의 배열로 변환된다.
따라서 해당 타입의 배열 파라미터를 선언한 것과 같다.

만약 가변 개수 인자를 생략하는 경우, 빈 배열이 전달된다.

가변 개수 인자 규칙

가변 개수 인자는 사용을 위해 '...'만 붙여서 끝나는 것이 아니라,
몇가지 준수해야할 규칙이 있다.

가변 개수 인자는 마지막 인자

// 불가
public void method(String... names, int number) {
	// 메서드 바디
}

// ** 가능 **
public void method(int number, String... names) {  // ** 메서드 마지막 인자에 위치 **
	// 메서드 바디
}

가변 개수 인자는 메서드 파라미터의 마지막 인자로 위치해야 한다.

가변 개수 인자 뒤에 다른 파라미터가 등장하는 경우 컴파일 에러가 발생한다.

1 Method 1 가변 개수 인자

// 불가
public void method(int... numbers, String... names) {  // ** 2개 이상 가변 개수 인자 불가 **
	// 메서드 바디
}

// ** 가능 **
public void method(int number, String... names) {
	// 메서드 바디
}

하나의 메서드에는 하나의 가변 개수 인자만 사용할 수 있다.

가변 개수 인자를 두 개를 사용하는 것은 불가능하다.

가변 개수 인자 오버로딩

public void method(String name) {
	// 메서드 바디
}

public void method(String... names) {
	// 메서드 바디
}

//  ** String name 호출 **
method("hello")

가변 개수 인자를 오버로딩 하는 경우 애매한 상황이 발생할 수 있다.
이 경우에는 더 구체적인 method(String name)이 호출된다.

가변 개수 인자를 오버로딩하는 경우 모호한 상황이 발생하지 않는지 확인하자.

마무리

가변 개수 인자는 처음 사용하는 경우 헷갈릴 수 있다.
가변 개수 인자가 가지는 특징과 규칙을 이해하고, 올바르게 사용하자.

profile
복습에 대한 비판과 지적을 부탁드립니다

0개의 댓글