[JAVA] 메서드 오버로딩 3탄

@욕심쟁이

·

2020. 8. 19. 15:10

반응형

가변인자(비정형인자, Variable Arguments)

 - 메서드 정의시 파라미터(매개변수)에 전달되는 인자의 갯수가 유동적일때 일정 갯수가 정해져 있지 않으므로

   변수 선언이 어렵다. 따라서, 이렇게 유동적인 인자의 갯수를 모두 처리 할 수 있도록 가변 인자를 사용하여

   변수를 선언하면 동일한 타입의 갯수가 제한이 없는 인자를 모두 전달받을 수 있음
 - 가변인자형태로 선언되는 매개변수는 전달받은 데이터를 해당이름을 가진 배열 형탱로관리함
 - 가변인자에 전달될 데이터는 0개부터 자유롭게 전달 가능

<주의사항!>

 - 가변인자는 마지막 파라미터로 단한번만 사용가능하다!

<가변인자를 사용한 메서드 정의기본문법>

 [제한자] 리턴타입 메서드명(데이터타입...변수명){ 
   //→전달되는 데이터들이 가변인자 변수명의 배열로 관리됨 
 } 
   

 예시1)

public class Ex3 {

	public static void main(String[] args) {
		
		//가변인자를 사용한 메서드는 호출시 전달할 파라미터 갯수 제한 없음
		VairableArguments va = new VairableArguments();
		va.print(1, 2);
		va.varargsPrint(1, 2,3,4);
		va.varargsPrint(1);
		va.varargsPrint();
		
	}

}
class VairableArguments{
	//가변인자(비정형인자)를 활용한 메서드 오버로딩
	public void varargsPrint(int...nums) {
		
		for(int i=0; i < nums.length; i++) {
			System.out.println(nums[i]);	
		}
		//향상된 for문
		for(int num :nums) {
			System.out.println(num+"");
			
		}
		
	}
	//주의사항!
	//가변인자는 마지막 인자로 단 한번만 사용가능
	public void varargsPrint(String titles, int...nums ) {}
	//→가변인자 앞에 다른 매개변수가 있더라도, 마지막이 가변인자면 ok
	//public void varargsPrint(int...nums, String titles) {}
	//→가변인자뒤에 다른매개변수가 올수없다.
	//public void varargsPrint(int...nums, String...titles) {}
	//→가변인자뒤에 다른매개변수가 올수 없으므로
	// 두개이상 가변이자 사용도 불가능
	
	//정수 2개(n1,n2)를 전달받아 출력하는 print()메서드 정의
	//정수 3개(n1,n2,n3)를 전달받아 출력하는 print()메서드 정의

	public void print(int n1, int n2) {
		System.out.println(n1+" ,"+ n2);
	}
	public void print(int n1, int n2, int n3) {
		System.out.println(n1+" ,"+ n2+", "+n3);
	}
	
	//→전달되는 데이터가 2개 또는 3개의 경우에만 메서드가 호출되고
	// 0개,1개, 또는 4개 이상의 경우에는 일치하는 매개변수가 없으르모 호출되지못하고 오류가 발생
	
		
}

 

public class Test3 {

	public static void main(String[] args) {
		
		Calculator3 c= new Calculator3();
		c.calc('+',10,20); 
		c.calc('+',10,20,30); 
		c.calc('+',10,20,30,40);
		
		c.calc('-',100,10);  //100-10=90
		c.calc('-',100,10,20);  //100-10-20 =70
		c.calc('-',100,10,20,30);  //100-10-20-30=40
		
		c.calc('*',10,20); //10*20=200
		c.calc('*',10,20,30); //10*20*30=6000
				
		c.calc('/',100,10);  //100/10=10
		c.calc('/',100,10,2);  //100/10/2=5

	}

}
class Calculator3{
	
	public void calc(char opr,int...nums) {
		//result값이 배열의 첫값이면 계산가능
		int result = nums[0];
		System.out.print(nums[0]);
		if(opr=='+') {
			for(int i=1; i < nums.length; i++) {
				System.out.print( " + " + nums[i]);
				result += nums[i];
			}

		}else if(opr == '-') {
			for(int i=1; i < nums.length; i++) {
				System.out.print(" - " + nums[i]);
				result -= nums[i];				
			}

		}else if(opr=='*') {
			for(int i=1; i < nums.length; i++) {
				System.out.print(" * " + nums[i]);
				result*=nums[i];
			}
		}else if(opr == '/') {
			for(int i=1; i < nums.length; i++) {
				System.out.print(" / " + nums[i]);
				result /=nums[i];
			}
		}
		System.out.println(" = "+ result );
	}
}
반응형