Java overloading

별의개발자커비·2023년 2월 15일
0

Java

목록 보기
41/66
post-thumbnail

메소드 오버로딩(overloading)

  • 매개변수의 숫자에 따라서 같은 이름의, 서로 다른 메소드를 호출
  • 이름은 같지만 시그니처는 다른 메소드를 중복으로 선언 할 수 있는 방법
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.setOprands(left, 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

    오버로딩의 규칙

  • 리턴타입이 다르면 오류가 발생한다.

public class OverloadingDemo {
    void A (){System.out.println("void A()");}
    void A (int arg1){System.out.println("void A (int arg1)");}
    void A (String arg1){System.out.println("void A (String arg1)");}
    //int A (){System.out.println("void A()");} // 오류
    public static void main(String[] args) {
        OverloadingDemo od = new OverloadingDemo();
        od.A();
        od.A(1);
        od.A("coding everybody");
    }
}

상속과 오버로딩

public class OverloadingDemo2 extends OverloadingDemo{
    void A (String arg1, String arg2){System.out.println("sub class : void A (String arg1, String arg2)");}
    void A (){System.out.println("sub class : void A ()");}
    public static void main(String[] args) {
        OverloadingDemo2 od = new OverloadingDemo2();
        od.A();
        od.A(1);
        od.A("coding everybody");
        od.A("coding everybody", "coding everybody");
         
    }
}
  • 실행 결과: 상속한 부모 클래스 거도 오버로딩 가능!

    	sub class : void A ()
    	void A (int arg1)
    	void A (String arg1)
    	sub class : void A (String arg1, String arg2)

overriding VS overloading

  • 위의 예제는 overloading을 설명하기 위한 예제일뿐 현실적이지 않다. 더 많은 값을 대상으로 연산을 해야 한다면 어떻게 해야할까? 아래와 같이 코드를 변경해보자.
package org.opentutorials.javatutorials.overloading.example1;
 
class Calculator{
    int[] oprands;
     
    public void setOprands(int[] oprands){
        this.oprands = oprands;
    }
     
    public void sum(){
        int total = 0;
        for(int value : this.oprands){
            total += value;
        }
        System.out.println(total);
    }
      
    public void avg(){
        int total = 0;
        for(int value : this.oprands){
            total += value;
        }
        System.out.println(total/this.oprands.length);
    }
}
public class CalculatorDemo {
    public static void main(String[] args) {
        Calculator c1 = new Calculator();
        c1.setOprands(new int[]{10,20});
        c1.sum();       
        c1.avg();
        c1.setOprands(new int[]{10,20,30});
        c1.sum();       
        c1.avg();   
    }
}

( 출처 생활코딩 https://www.opentutorials.org/course/1194/6088 )

0개의 댓글