728x90

우리가 오버로드, 파라미터를 받을때 하나받을지, 여러개를 받을지 모른다. 그래서 1,2,3개 등 여러개의 파라미터를 받는 메소드를 만들어 오버로드를 해야한다.

package class_constructor;


public class VarArgs_0928 {
	
	private int sum;
	
	public int sum(int a, int b) {
		return a+b;
	}
	public int sum(int a, int b, int c) {
		return a+b+c;
	}
	public int sum(int a, int b, int c, int d) {
		return a+b+c+d;
	}

	public static void main(String[] args) {
		VarArgs_0928 va = new VarArgs_0928();
		System.out.println("합 = "+va.sum(10,20));
		System.out.println("합 = "+va.sum(10,20,30));
		System.out.println("합 = "+va.sum(10,20,30,40));
	}

}

 내가 아는대로라면 메인메소드에서 인자값(파라미터)를 저렇게 넣을려면 그 인자값에 맞는 메소드를 오버로딩해야 한다. 

근데 저게 100개까지가면...? 파라미터(인자)를 받는 메소드를 100개나 만들어야 하나...?

 

그래서 있는 메소드가 가변인자 varargs이다.
java 1.5부터 추가 되었고 자료형의 인자를 0개 이상 받을 수 있다!

기본 문장은 이렇게 생겼다.

public static int hash(Object ... values)

가변인자를 선언해주면 인자의 수에 제한을 두지 않고 동적으로 받을 수 있다.
동작 원리는 배열을 이용하는 것이다.
여기서 ...은 무조건 3개이다. 무.조.건.

package class_constructor;


public class VarArgs_0928 {

	public int sum(int...ar) {//파라미터를 일정한 배열로 받는 방법, .은 '무조건'3개를 찍어야한다.
		//ar에 아래에 10,20이 들어와 방이 2개가된다
		//ar에 아래에 10,20.30이 들어와 방이 3개가된다
		int hap =0;
		for(int i=0; i<ar.length; i++) {
			hap += ar[i];
		}
		return hap;
	}
	//여기서 인트말고 더블, 뭐 아무거나 받기를 원하면 sum(int ...ar)을 object로 바꾸면 된다.
	//상속이라는 개념 때문에 가능하다. 대신 밑에 상세코드는 바꿔야한다.
	
	
	
	public static void main(String[] args) {
		VarArgs_0928 va = new VarArgs_0928();
		System.out.println("합 = "+va.sum(10,20));
		System.out.println("합 = "+va.sum(10,20,30));
		System.out.println("합 = "+va.sum(10,20,30,40));
	}

}

이렇게 코드를 짜주면 간단하게 내가 원하는 만큼 인자를 넣어줄 수 있다.
위의 코드와 달리 int말고 다른걸 넣고 싶으면 String이나 double,아님 Object를 해주고
밑에 코드를 타입에 맞게 변경해주면 된다.

 

728x90

'JAVA' 카테고리의 다른 글

객체배열 숙제 10/07  (0) 2020.10.07
DecimalFormat(숫자 형식 클래스)  (0) 2020.10.01
객체 타입 확인 instanceOf()메소드, indexOf()응용문제  (0) 2020.09.29
Import Static  (0) 2020.09.28
배열 연습문제 05  (0) 2020.09.24

+ Recent posts