반응형
메소드 오버로딩은 메소드명은 동일하면서 매개변수의 개수, 타입이 다릅니다.
즉, 매개변수가 다르면 메소드명이 같아도 서로 다른 메소드가 되는 것입니다.
→ 다형성 (객체지향 특성)
아래의 계산기는 2개의 값(left, right)에 대한 연산(sum) 만을 수행 할 수 있습니다.
class Calculator{
int left, right;
public Calculator( int left, int right ){
this.left = left;
this.right = right;
}
public String sum(){
return "" + this.left+this.right;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator(10, 20);
System.out.println(calc.sum());
}
}
그런데 만약 3개의 값을 대상으로 연산을 해야 한다면 어떻게 해야할까?
class Calculator{
int left, right;
int third;
public Calculator(int left, int right){
this.left = left;
this.right = right;
}
public Calculator(int left, int right, int third){
this.left = left;
this.right = right;
this.third = third;
}
public String sum(){
int result = this.left + this.right + this.third;
return "" + result;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc1 = new Calculator(10, 20);
Calculator calc2 = new Calculator(10, 20, 30);
System.out.println(calc1.sum());
System.out.println(calc2.sum());
}
}
▶ 매개변수의 숫자에 따라서 같은 이름의, 서로 다른 메소드를 호출하고 있다는 것을 알 수 있습니다.
이름은 같지만 시그니처는 다른 메소드를 중복으로 선언 할 수 있는 방법을
메소드 오버로딩(overloading)이라고 합니다.
(생성자든 일반 메소드든 오버로딩 개념은 동일하게 적용됩니다.
단지 리턴 타입 존재 유무에 차이가 있습니다.)
class Calculator{
int left, right;
public Calculator(int left, int right){
this.left = left;
this.right = right;
}
public String sum(String a){
int result = this.left + this.right + this.third;
return "" + result;
}
// 매개변수 타입이 다르거나
public String sum(int a){
int result = this.left + this.right + this.third;
return "" + result;
}
// 매개변수 개수가 다르거나
public String sum(String a, int b){
int result = this.left + this.right + this.third;
return "" + result;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator(10, 20);
}
}
▶ 반면에 매개변수는 같지만 리턴타입이 다르면 오류가 발생한다.
매개변수가 갯수는 같고 타입이 다르며 어떤 메소드를 호출할지를 자바가 판단 할 수 있는 있지만
리턴 타입만 다른 것이라면 애초에 (호출하는 입장에서)무엇을 호출해야 될지 알 수 없기 때문입니다.
(이때는 메소명을 다르게 해야 하고, 메소드명이 다르기에 오버로딩이라고 하지 않습니다.)
반응형
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] [예제] 사칙연산 계산기 (0) | 2021.03.02 |
---|---|
[Java] 가비지 컬렉션(Garbage Collection) (0) | 2021.03.02 |
[Java] 우선순위 큐(Priority Queue) 예제 (0) | 2021.02.23 |
[Java] [예제] 비만 지수 구하기 (0) | 2021.02.23 |
[Java] 역컴파일로 기본 생성자 확인해보기 (0) | 2021.02.23 |
댓글