본문 바로가기
프로그래밍 언어/Java

[Java] 오버로딩(Overloading)

by 까망 하르방 2021. 2. 23.
반응형

메소드 오버로딩은 메소드명은 동일하면서 매개변수의 개수, 타입이 다릅니다.

즉, 매개변수가 다르면 메소드명이 같아도 서로 다른 메소드가 되는 것입니다.

다형성 (객체지향 특성)

 

아래의 계산기는 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);
    }
}

 

▶ 반면에 매개변수는 같지만 리턴타입이 다르면 오류가 발생한다.

    매개변수가 갯수는 같고 타입이 다르며 어떤 메소드를 호출할지를 자바가 판단 할 수 있는 있지만 

    리턴 타입만 다른 것이라면 애초에 (호출하는 입장에서)무엇을 호출해야 될지 알 수 없기 때문입니다.

    (이때는 메소명을 다르게 해야 하고, 메소드명이 다르기에 오버로딩이라고 하지 않습니다.)

 

 

 

반응형

댓글