본문 바로가기

BackEnd/Java

오버로딩(Overloading)과 가변인자(비정형인자)

오버로딩 (Overloading)

  • 같은 메서드에 인자 값과 자료형이 다른 경우 오버로딩을 사용함
  • 파라미터의 타입 또는 갯수가 달라야함
  • 인자 값이 여러개인 경우 자료형과 순서를 그대로 따라가야 한다

아래는 클래스 하나를 생성하고 이름이 같고 자료형은 다른 메서드 여러개를 만들어
절대값을 출력하기 위해 메서드에 인자 값을 각각 다른 자료형으로 출력했을 때
해당 인자 값이 같은 메서드를 찾아 출력되게 한 코드이다

 

OverloadingAbsoluteNum test = new OverloadingAbsoluteNum();

System.out.println(test.abs(-5));
System.out.println(test.abs(-3.14));
System.out.println(test.abs(-20L));

class OverloadingAbsoluteNum {
	// int형 파라미터 1개를 전달받은 abs() 메서드
	public int abs(int n) {
		if(n < 0) {
			n = -n;
		}
		return n;
	}
	
	// double형 파라미터 1개를 전달받는 abs() 메서드
	public double abs(double n) {
		if(n < 0) {
			n = -n;
		}
		return n;
	}
	
	// double형 파라미터 1개를 전달받는 abs() 메서드
	public long abs(long n) {
		if(n < 0) {
			n = -n;
		}
		return n;
	}
}

 

 


 

가변인자 또는 비정형인자 (...)

  • 배열의 수는 0 부터 무한
  • 인덱스 0 부터 시작하는 배열이 되기 때문에 사용자에 의해 파라미터 값이 부족해서 연산/실행이 되지 않는 경우가 있으니 체크해줄 필요가 있다
  • 가변인자는 항상 파라미터의 마지막에 와야한다

기본 문법

 

public void cal(char opr, int... nums) {
	...
}

 

 

아래는 가변인자(비정형인자)를 이용한 계산기 코드이다

 

public static void main(String[] args) {
	// 가변인자를 활용한 계산기
	Calculator3 c = new Calculator3();

	c.cal('+', 2, 3); // 2 + 3 = 5 출력
	c.cal('+', 2, 3, 5); // 2 + 3 + 5 = 10 출력
	c.cal('+', 2, 3, 5, 10); // 2 + 3 + 5 + 10 = 20 출력
	
	c.cal('-', 10, 2); // 10 - 2 = 8 출력
	c.cal('-', 10, 2, 3); // 10 - 2 - 3 = 5 출력
	c.cal('-', 10, 2, 3, 5); // 10 - 2 - 3 - 5 = 20 출력
	
	c.cal('*', 10, 2); // 10 * 2 = 20 출력
	c.cal('*', 10, 2, 3); // 10 * 2 * 3 = 60 출력
	
	c.cal('/', 10, 2); // 10 / 2 = 5 출력
	c.cal('/', 10, 2, 3); // 10 / 2 / 3 = 1 출력
}

class Calculator3 {
	public void cal(char opr, int... nums) {
		// 최소한 피연산자(데이터)가 2개 이상일 때만 연산 수행
		if(nums.length < 2) {
			System.out.println("피연산자가 부족합니다!");
			return;
		}
		
		int total = nums[0]; // 연산을 누적할 변수(배열의 첫번째 숫자를 초기값으로 저장)

		// 다음 연산은 배열의 두번째 숫자부터 시작
		if(opr == '+') {
			System.out.print(nums[0]);
			
			for(int i = 1; i < nums.length; i++) {
				System.out.print(" + " + nums[i]);
				total += nums[i];
			}
		} else if(opr == '-') {
			System.out.print(nums[0]);
			
			for(int i = 1; i < nums.length; i++) {
				System.out.print(" - " + nums[i]);
				total -= nums[i];
			}
		} else if(opr == '*') {
			System.out.print(nums[0]);
			
			for(int i = 1; i < nums.length; i++) {
				System.out.print(" * " + nums[i]);
				total *= nums[i];
			}
		} else if(opr == '/') {
			System.out.print(nums[0]);
			
			for(int i = 1; i < nums.length; i++) {
				System.out.print(" / " + nums[i]);
				total /= nums[i];
			}
		} 
		
		System.out.println(" = " + total);
	}
}

'BackEnd > Java' 카테고리의 다른 글

생성자 (Constructor)  (0) 2020.02.12
패키지(Package)와 import  (0) 2020.02.11
Getter, Setter  (0) 2020.02.11
메서드 (method)  (0) 2020.02.04
배열 (Array)  (1) 2020.01.23