1. Arbitrary Number of Arguments[일정하지 않은 개수의 파라미터]
- 일정한 형의 변수를 여러 개 전달해야 할 때 사용함
- Method call시, 일반 parameter처럼 넘기고, Method에서 받은 Parameter는 Array로 사용됨
2. Variable Arguments[가변인자]
- 기존에는 Method의 매개변수 개수가 고정적이었는데, JDK 1.5부터 동적으로 지정해 줄 수 있게 되었음
- Type… variable명 과 같은 형식으로 선언하며, PrinStream Class의 printf()가 대표적인 예시임
- public PrintStream printf(String format, Object… args) { … };
- 가변인자 외에도 매개변수가 더 있으면, 가변인자를 매개변수 중에서 제일 마지막에 선언해줘야함
- 마지막에 선언 안해주면 컴파일 에러가 발생함
- 컴파일 에러 발생 : java: varargs parameter must be the last parameter
- 가변인자를 제일 마지막에 선언하지 않을 경우, 가변인자인지 아닌지를 구별할 방법이 없기 때문에 허용하지 않는다는 의미
3. Variable Arguments 활용
- 여러 문자열을 하나로 결합하여 반환하는 test method를 작성한다면, 매개변수의 개수를 다르게 해서 여러 개의 method를 작성해야 함
- String test(String s1, String s2) { … };
- String test(String s1, String s2, String s3) { … };
- String test(String s1, String s2, String s3, String s4) { … };
- 근데 가변인자를 사용하면 method 하나로 간단하게 대체 가능함
- String test(String… str) { … };
- Method를 Call할 때는 인자의 개수를 가변적으로 할 수 있으며, 인자가 아예 없이도 Array도 인자가 될 수 있음
- test()
- test(”test”)
- test(”test”, “test2”, “test3”)
- test(new String[] { “A”, “B” })
4. Variable Arguments 사용시
- 가변인자는 내부적으로 배열을 이용하는 것이며, 가변인자가 선언된 method를 Call할때마다 Array가 새로 생성됨
- 자변인자 method를 Override할때도 주의 해야하는데?
- method가 구분되지 않아 에러가 발생함
- 가변인자를 사용한 method는 override하지 않는 것이 좋음 ⇒ 가변인자를 선언한 method를 override시 method에서 구별되지 못하는 경우가 발생하기 때문임
- Error
- java: reference to test is ambiguous
- both method test(java.lang.String…) in Main and method
- test(java.lang.String, java.lang.String…) in Main match