= 비정형 인자
메서드 파라미터를 하나의 인자만 사용하여 다양하게 전달 받는 기능
동일한 타입의 파라미터를 0개 ~ 무한대로 전달받아 배열로 관리
-> 전달된 데이터는 개수에 따라 자동으로 배열 생성 후 저장됨
메서드 파라미터 선언 시 데이터타입 뒤에 ... 기호를 표기
다른 파라미터와 가변 인자 조합 가능
가변 인자는 마지막 파라미터로 한 번만 지정 가능
- 가변인자를 사용한 메서드 오버로딩 기본
public static void main(String[] args) {
Variable v = new Variable();
v.print("이대열");
v.print("이대열", "최성윤");
v.print("이대열", "최성윤", "이장준");
// 이름 무한대로 추가 가능
v.print(); // 파라미터 없어도 가능 (0개부터 가능하니까!)
}
class Variable {
public void print(String...names) {
// 가변인자를 사용한 메서드 정의 시 데이터 타입 뒤에 ... 기호를 붙임
// String 타입의 데이터를 0개부터 무한대로 전달 받을 수 있음
for(int i = 0; i < names.length; i++) {
// for문을 통해 모든 배열에 접근
System.out.print(names[i] + " ");
// print() 메서드를 이용하여 한 줄에 모두 출력
}
System.out.println();
// 없어도 되는데 위에서 여러 개를 출력할 거라서 적어준 거임
}
}
- 다른 파라미터와 가변 인자를 조합하여 메서드 오버로딩
public static void main(String[] args) {
Variable v = new Variable();
v.print(1, "봉재현");
v.print(2, "봉재현", "김지범");
// int형 정수는 하나만 넣을 수 있지만
// String 타입의 데이터는 무한대로 추가 가능
}
class Variable {
public void print(int num, String...names) {
System.out.println(num);
// num 먼저 출력
// 근데 뒤에 출력해도 상관 없지 않나?
for(int i = 0; i < names.length; i++) {
System.out.println(names[i]);
// 만약에 num 변수 한 번, names 한 번 출력하고 싶다면
// 여기에 System.out.println(num) 넣으면 됨!
// 물론 names[i] 출력문 위에!
}
}
}
< 다른 파라미터와 가변 인자를 조합할 때 주의할 점 >
- 가변 인자가 다른 파라미터보다 앞에 올 수 없다!
- 가변 인자는 2개 이상 올 수 없음!
public void print(int...nums, String...names){} // 오류 발생
- 이름을 0개 ~ 무한대로 전달받아 출력하는 메서드 오버로딩
-> 단, 이름이 하나도 없을 때는 "전달받은 이름 없음!" 출력
-> 1개 이상 받았을 때는 모두 출력하기
public static void main(String[] args) {
NamesPrint np = new NamesPrint();
np.print();
// "전달받은 정수 없음!" 출력됨
np.print("이대열");
np.print("이장준", "배승민", "김지범");
}
class NamesPrint {
public void print(String...names) {
if(names.length == 0) {
// 가변형 인자를 사용할 경우 배열로 저장되기 때문에
// 파라미터의 값이 0이 아닌 배열 길이가 0일 때로 조건 적어주기
System.out.println("전달받은 이름 없음!");
} else {
for(int i = 0; i < names.length; i++) {
System.out.println(names[i]);
// for문을 이용하여 모든 이름 출력
}
}
}