Programming/Java

[Java 객체지향 프로그래밍] 오버로딩(Overloading)

joah.k 2021. 2. 22. 22:28
728x90

- 오버로딩(Overloading)의 개념

 

사전상 Overloading의 의미는 '과적(過積)' 을 뜻한다. 자바에서의 Overloading은 한 클래스 안에서 동일한 이름의 메소드를 여러 개 정의하는 것을 의미 하는데, 하나의 이름에 여러 기능이 가능하다고 이해해도 좋을 것 같다. 함수명이 고유해야하는 C 언어와 달리 java는 매개변수의 개수 또는 타입이 다르면, 동일한 이름을 사용해서 메소드를 정의할 수 있다.

 

우리가 많이 쓰는 println 메소드가 대표적인 오버로딩의 예라고 볼 수 있다. '출력' 기능을 가진 메소드들을 println이라는 이름으로 정의할 수 있다. 

 

 

 

- 오버로딩(Overloading)의 조건 

 

  • 메소드 이름이 동일해야 한다.
  • 매개 변수의 개수 or 타입이 달라야 한다.
  • 매개 변수는 같고 리턴 타입이 다른 경우 오버로딩이 성립되지 않는다. (주의) 
  • 즉, 오버로딩 메소드들은 매개 변수 차이로만 구별될 수 있다.
class Calc
{
	int add(int num1, int num2){
    	return num1 + num2;
        {
    int add(int num1){  //이름이 add로 같아도 에러가 나지 않는다 
    	return num1 + 10; 
        }
 }       

 

 

- 오버로딩을 사용하는 이유 

 

  • 편리성 -> 같은 기능을 하는 메소드를 정의할 때 하나의 메소드명으로 다양한 입력값을 받기 위해서
    (println 하나면 됐지, printInt printDouble printString 등등을 각각 정의하면 관리가 불편하지 않을까?)

 

 

- 오버라이딩(Overriding)과의 차이점

 

하필 비슷한 이름과 비슷해보이는 생김새 때문에 많이 헷갈리는 개념이다. 하지만 둘은 명백히 다르다. 

  • 오버로딩 : 하나의 클래스 안에서 / 메소드명은 같지만 기능은 다른 개념 
  • 오버 라이딩 : 상속 관계 / 상속받은 메소드를 재정의 
728x90