반응형

[JAVA] 자바 오버 로딩 (Overloading)


하나의 클래스 안에서 여러 개의 같은 이름의 메서드를 여러 개 정의하는 것을 오버 로딩이라고 합니다.

이름이 같은 함수가 여러 개의 인자를 갖고 있는 것처럼 보여서 과적되었다고 표현하는 것입니다.

오버 로딩은 조건이 필요한데, 3가지를 기억하시면 됩니다.

  • 메서드의 이름이 같아야 한다.
  • 매개변수의 개수 또는 타입이 달라야 한다.
  • 반환 타입이 다른 것은 오버 로딩에 영향을 미치지 않는다.

 

결국 오버 로딩이란 메서드들의 이름은 같지만, 매개변수의 개수 또는 타입이 달라질 때 사용하는 것입니다.

주의해야 할 점은 반환 타입이 다르다고 할지라도 이름과 매개변수가 같으면 같은 함수로 인식된다는 점입니다.

반환 타입은 오버 로딩에 영향을 주지 않습니다.

반환 타입은 넘겨주는 쪽에서 제대로 된 타입만 넘겨준다면, 받는 쪽에서 형 변환을 통해 사용할 수 있기 때문입니다.

 


실습 코드

 

public class OverloadingTest {
    public static void main(String[] args) {
        add(4,5);
        add(3L,2L);
        add(1,2,3);
    }
    static void add(int a, int b){
        System.out.println(a + b);
    }
    
    static void add(long a, long b){ // 타입이 다른 경우
        System.out.println(a + b);
    }
    
    static void add(int a, int b, int c){ // 개수가 다른 경우
        System.out.println(a+b+c);
    }
}
 
cs

 

 

매개변수의 숫자를 더하는 함수로 add 함수를 만들어놓고,

추가적으로 오버 로딩하여 타입이 다른 경우와 개수가 다른 경우를 테스트해보시면 함수의 이름이 같다고

하더라도 오버 로딩이 적용되어 올바르게 작동하는 점을 보실 수 있습니다.

 


반환 타입만 바꾼 경우

 

 

같은 함수의 이름과 매개변수를 같게 하여 반환 타입만 바꿔본 경우입니다. 같은 함수로 인식되어 오류가 발생합니다.

반환 타입만 바꾼다고 해서 오버 로딩이 되지 않으며 컴파일 오류가 발생합니다.

 


기변 매개변수

 

public class Main1{
    public static void main(String[] args) {
        System.out.println(defaultParameter(1,2));
        System.out.println(defaultParameter(1,2,3,4));
    }
 
    static int defaultParameter(int... a) {
        int sum = 0;
        for (int i : a) {
            sum+=i;
        }
        return sum;
    }
}
cs

 

자바에서 함수의 매개 변수의 개수를 바꿔가며 줄 때 함수의 매개 변수의 선언부에 타입... 변수라고 지정해주면

타입만 맞다면 최대 개수의 255개 내에서 제한없이 함수를 호출할 수 있습니다. 사실 배열 타입으로 선언된 매개변수입니다.

주의할 점은 기본 매개변수와 같이 사용한다면 항상 선언부의 맨 뒤에 와야 합니다.


 

오버 로딩의 개념 자체는 어렵지 않으며, 오버 라이딩과 혼동할 수 있으니 오버 라이딩도 함께 공부하시면 좋습니다.

반응형

+ Recent posts