package ex_overloading;
public class Ex1 {
public static void main(String[] args) {
/*
* 가변 인자(비정형 인자, Variable Arguments)
* - 메서드 정의 시 파라미터(매개변수)에 전달되는 인자의 갯수가 유동적일 때
* 일정 갯수가 정해져 있지 않으므로 변수 선언이 어렵다.
* 따라서, 이렇게 유동적인 인자의 갯수를 모두 처리할 수 있도록 가변 인자를 사용하여
* 변수를 선언하면 동일한 타입의 갯수가 제한이 없는 인자를 모두 전달받을 수 있음
* - 가변 인자 형태로 선언되는 매개변수는 전달받은 데이터를 해당 이름을 가진 배열 형태로 관리함
* - 가변 인자에 전달될 데이터는 0개부터 자유롭게 전달 가능
*
* < 가변 인자를 사용한 메서드 정의 기본 문법 >
* [접근제한자] 리턴타입 메서드명(데이터타입... 변수명) {
* // => 전달되는 데이터들이 가변인자 변수명의 배열로 관리됨
*
* }
*
* < 주의사항 >
* - 가변 인자는 마지막 파라미터로 단 한 번만 사용 가능!
*
*/
// VariableArguments 인스턴스 생성
VariableArguments va = new VariableArguments();
va.normalPrint(10, 20);
va.normalPrint(10, 20, 30);
// va.normalPrint(10, 20, 30, 40); // 오류 발생!
// va.normalPrint(); // 오류 발생!
System.out.println("================================");
va.print(10);
va.print(10, 20);
va.print(10, 20, 30, 40);
va.print(); // 전달할 데이터가 없어도 호출 가능
va.print(10, 20, 30);
// => 가변인자를 사용한 메서드 호출 시 전달할 파라미터 갯수 제한 없음
}
}
class VariableArguments {
// 일반 메서드 오버로딩
// 정수 2개(n1, n2)를 전달받아 출력하는 normalPrint() 메서드 정의
public void normalPrint(int n1, int n2) {
System.out.println(n1 + ", " + n2);
}
// 정수 3개(n1, n2, n3)를 전달받아 출력하는 normalPrint() 메서드 정의
public void normalPrint(int n1, int n2, int n3) {
System.out.println(n1 + ", " + n2 + ", " + n3);
}
// => 전달되는 데이터가 2개 또는 3개의 경우에만 메서드가 호출되고
// 0개 또는 4개 이상의 경우에는 일치하는 매개변수가 없으므로 호출되지 못하고
// 오류가 발생한다!
// 가변인자(비정형 인자)를 활용한 메서드 오버로딩
// => 하나의 메서드 정의만으로 갯수가 다른 파라미터를 모두 처리 가능
public void print(int...nums) {
// 외부로부터 전달되는 정수형 데이터는 갯수 제한 없이 모두 nums 이름을 갖는 배열에 저장됨
// => 반복문을 사용하여 배열 내의 모든 데이터 접근 가능
// 1) 일반 for문
// for (int i = 0; i < nums.length; i++) {
// System.out.print(nums[i] + " ");
//
// }
// 2) 향상된 for문
for (int num : nums) {
System.out.print(num + " ");
}
System.out.println();
}
public void print2(String title, int...nums) {}
// => 가변인자 앞에 다른 매개변수가 있더라도, 마지막이 가변인자면 OK
// public void print2(int...nums, String title) {} // 오류 발생!
// => 가변인자 뒤에 다른 매개변수가 올 수 없다!
// public void print2(String...title, int...nums) {} // 오류 발생!
// => 가변인자 뒤에 다른 매개변수가 올 수 없으므로
// 2개 이상의 가변인자 사용도 불가능!
}