1. Java Method Overloading   



 만약 클래스가 다른 파라미터(parameter: 입력값) 에 같은 이름으로 다수의 메소드를 가질 때, 이를 메소드 오버로딩이라 합니다. 다시 말하면, 한 클래스 내에, 여러 개의 같은 이름의 메소드를 정의하는 것을 말합니다.


만약에 단 하나의 작업을 수행해야 해야 한다면, 메소드의 이름을 동일하게 만들어 프로그램의 가독성을 증가시킬 수 있습니다.


여러분이 주어진 수들의 덧셈을 수행해야 한다고 가정한다면, 인수의 모든 숫자가 될 수 있습니다.

만약 여러분이 a(int,int), 그리고 b(int,int,int)와 같은 메소드를 작성한다면, 여러분 뿐만 아니라 다른 사람도 메소드의 동작을 이해하는 데 어려울 수 있습니다. 메소드의 이름이 다르기 때문입니다


그러므로 프로그램을 빠르게 이해하기 위해 메소드 오버로딩을 해야만 합니다. 

하나의 메소드로 여러기능을 수행할 수 있기 때문이죠.



Advantage of method overloading ?

메소드 오버로딩의 이점 ?


메소드 오버로딩은 프로그램의 가독성을 증가시킵니다.


Different ways to overload the method 

메소드 오버로드를 하기 위한 다른 방법


자바에서는 2가지 방법이 있습니다.

 1. 인수의 수를 변경함으로써

 2. 데이터 타입을 변경함으로써


자바에서, 메소드 반환 값 종류(type)를 바꾸는 것으로는 메소드 오버라이딩이 가능하지 않습니다.  




1) 인수의 수 변경함으로써 하는 메소드 오버로딩의 예


예제에서 여러분은 2개의 오버로드 메소드를 만들 수 있습니다. 

첫 번째 sum 메소드는 2개 숫자의 덧셈을 수행하고, 두번째 sum 메소드는 3개 숫자의 덧셈을 수행합니다.



class Calculation{

  void sum(int a,int b){System.out.println(a+b);}

  void sum(int a,int b,int c){System.out.println(a+b+c);}


  public static void main(String args[]){

  Calculation obj=new Calculation();

  obj.sum(10,10,10);

  obj.sum(20,20);

  }

}


output

30

40



2) 인수의 데이터 타입을 변경함으로써 하는 메소드 오버로딩의 예


이 예제에서 여러분은 데이터 타입이 다른 2가지의 오버로드 메소드를 만들 수 있습니다. 

첫 번째 sum 메소드는 2개의 정수 인수를 받고, 두 번째 sum 메소드는 2개의 double 인수를 받습니다.



class Calculation2{

  void sum(int a,int b){System.out.println(a+b);}

  void sum(double a,double b){System.out.println(a+b);}

  

  public static void main(String args[]){

      Calculation2 obj=new Calculation2();

      obj.sum(10.5,10.5);

      obj.sum(20,20);

   }

}


  

output 

21.0

40



q) Can we overload main() method?

메인 메소드를 오버로드 할 수 있나여?


가능합니다. 여러분은 클래스 속 메인 메소드의 어떤 숫자라도 얻을 수 있습니다. 메소드 오버로딩을 통해서 말이죠.



class Overloading1{

   public static void main(int a){

       System.out.println(a);

   }


   public static void main(String args[]){

       System.out.println("main() method invoked");

   main(10);

   }

}



output:main() method invoked

10












2. Java Method Overriding   



만약 sub클래스(자식 클래스)가 부모클래스에서 선언된 것과 같은 메소드를 가질때, 메소드 오버라이딩이라 합니다.


다시 말해서, 자식클래스가 부모클래스에서 사용했었던 메소드를 가져와 특정한 구현내용을 부여할 때 , 이를 메소드 오버라이딩이라 합니다.  




Usage of method overriding

메소드 오버라이딩의 사용


 1. 메소드 오버라이딩은 이미 수퍼 클래스(부모 클래스)에서 사용했었던 메소드에 특정 구현을 부여하는데 사용됩니다.

 2. 메소드 오버라이딩은 다형성 런타임에 사용됩니다




Rule for Java method overriding

메소드 오버라이딩의 규칙


 1. 메소드는 부모 클래스와 같은 이름을 가져야 합니다.

 2. 메소느는 부모 클래스와 같은 파라미터를 가져야 합니다. 

 3. 메소드는 IS-A 관계여야 합니다. (상속)




Understanding the problem without method overriding

메소드 오버라이딩을 제외한 문제 이해


만약 여러분이 메소드 오버라이딩을 사용하지 않는 다면, 다음과 같은 프로그램에 직면할 수 있습니다.


class Vehicle{

  void run(){System.out.println("Vehicle is running");}

}

class Bike extends Vehicle{


  public static void main(String args[]){

  Bike obj = new Bike();

  obj.run();

  }

}


 

output

Vehicle is runing


위에서는 자식 클래스의 run() 메소드에 특정한 수행을 주어야만 합니다. 

그게 여러분이 오버라이딩을 사용하는 이유이죠.




Example of method overriding

메소드 오버라이딩의 예시


아래 예에서, 부모클래스에 정의된 것 처럼 자식클래스에 run 메소드를 정의합니다. 

메소드의 이름과 파라미터는 동일하고, 클래스 사이에 IS-A 관계가 존재합니다. 



class Vehicle{

void run(){System.out.println("Vehicle is running");}

}

class Bike2 extends Vehicle{

void run(){System.out.println("Bike is running safely");}


public static void main(String args[]){

    Bike2 obj = new Bike2();

    obj.run();

}


 

Output

Bike is running safely




Can we override static method?

static 메소드도 오버라이드 할 수 있나요 ?


아니요. 오버라이드 될 수 없습니다.




Why we cannot override static method?

왜 안되죠?


왜냐하면 static 메소드는 클래스에 묶여있기 때문입니다.

반면 인스턴스 메소드는 오브젝트(Object)에 묶여있습니다. 

Static 은 클래스 영역에 속하고 instance 는 heap 영역에 속합니다.



Can we override java main method?

자바 메인 메소드는 오버라이드 할 수 있나요?


안됩니다. main은 static 메소드 이기 때문입니다.










요약하자면 오버로딩과 오버라이딩의 차이 


오버로딩 : 기존에 없는 새로운 메소드를 추가.

오버라이딩 : 부모로부터 받은 메소드를 변경하는 것.


입니다.








영어원문내용출처 :http://www.javatpoint.com/

번역,의역 및 작성 : 초코토끼

검수 : 개발토끼

오역 및 오타의 지적은 겸손히 받겠습니다





+ Recent posts