계산기 예제로 돌아가보자. 우리의 계산기는 2개의 값(left, right)에 대한 연산(sum, avg) 만을 수행 할 수 있다. 그런데 만약 3개의 값을 대상으로 연산을 해야 한다면 어떻게 해야할까? 우선 아래와 같이 입력값을 3개 받아야 할 것이다.
c1.setOprands(10, 20, 30);
이를 위해서 기존의 setOprands 메소드를 아래와 같은 모습을 수정한다면 2개의 입력값을 받을 수 없게 될 것이다.
public void setOprands(int left, int right, int third){
this.left = left;
this.right = right;
this.third = third;
}
이런 경우 아래와 같이 메소드의 이름을 변경하면 될 것이다.
c1.setOprands2(10, 20);
c1.setOprands3(10, 20, 30);
이것도 좋은 방법이지만 매개변수의 수에 따라서 메소드의 이름이 달라지는 것은 왠지 깔끔한 방법이 아닌 것 같다. 그럼 어떻게 해야 좋을까? 코드를 보자.
package org.opentutorials.javatutorials.overloading.example1;
class Calculator{
int left, right;
int third = 0;
public void setOprands(int left, int right){
System.out.println("setOprands(int left, int right)");
this.left = left;
this.right = right;
}
public void setOprands(int left, int right, int third){
System.out.println("setOprands(int left, int right, int third)");
this.left = left;
this.right = right;
this.third = third;
}
public void sum(){
System.out.println(this.left+this.right+this.third);
}
public void avg(){
System.out.println((this.left+this.right+this.third)/3);
}
}
public class CalculatorDemo {
public static void main(String[] args) {
Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
c1.setOprands(10, 20, 30);
c1.sum();
c1.avg();
}
}
아래는 기본 예제와의 차이점이다.
실행 결과는 아래와 같다.
setOprands(int left, int right)
30
15
setOprands(int left, int right, int third)
60
30
아래 코드를 보자.
c1.setOprands(10,20);
이 코드의 실행 결과는 화면에 아래와 같은 메시지를 출력한다.
setOprands(int left, int right)
다음 코드를 보자.
c1.setOprands(10, 20, 30);
실행 결과는 아래와 같다.
setOprands(int left, int right, int third)
이를 통해서 알 수 있는 것은 매개변수의 숫자에 따라서 같은 이름의, 서로 다른 메소드를 호출하고 있다는 것을 알 수 있다.
이름은 같지만 시그니처는 다른 메소드를 중복으로 선언 할 수 있는 방법을 메소드 오버로딩(overloading)이라고 한다.