Programming/Java

[Java] 메소드 오버로딩 (Method Overloading)

Isaac S. Lee 2023. 7. 20. 11:52

메소드마다 이름을 다르게 하여 기능을 명확하게 할 수도 있지만, 프로젝트가 커질수록 메소드의 개수 또한 많아지므로 모두 기억하고 사용하기 어렵다. 이때 사용할 수 있는 게 메소드 오버로딩이다.

 

메소드 오버로딩은 메소드 이름을 통일하여 여러 개 정의하는 것을 의미하며, 이때 메소드의 매개변수의 개수, 순서, 또는 타입이 다르도록 하여 중복 정의가 가능하다.

 

동일한 이름의 메소드가 다양한 상황에서 사용되며, 메소드 호출 시 전달되는 인자의 타입이나 개수에 따라 적합한 메소드가 자동으로 선택되어 개발을 편하게 해 준다. 이러한 구현이 어렵지 않으므로 실제로 많이 사용되는 기술이기도 하다.

 

그럼, 메소드를 여러 개 선언해 보면서 위의 조건이 어떻게 적용되는지 알아보도록 하자!

 

💡메소드 오버로딩 구현 가능 조건


1. 매개변수의 개수가 달라야 한다.
2. 매개변수의 자료형이 달라야 한다.

public static void test() {}
public static void test(int n) {} // 매개변수 개수가 다르므로 가능
public static void test(int n, int m) {} // 매개변수의 개수가 다르므로 가능
public static void test(String s) {} // 매개변수의 자료형이 다르므로 가능

test();
test(10);
test("Isaac");
test(10, 20);

이름만 가지고는 식별을 못하지만, 매개변수를 가지고 식별이 가능하므로 메소드 이름을 똑같이 만들 수 있다. 또한, 매개변수의 자료형이 다르면 각각 무엇을 호출하는지 분명하기 때문에 이 역시 메소드 오버로딩이 가능하다.

 

💡메소드 오버로딩의 활용


public class Examples {
    public static void main(String[] args) {
        Example example = new Example();

        print(100); // 100
        print(3.14); // 3.14
        print("Hello"); // Hello!
    }

    // 정수형 매개변수를 받는 메소드
    public void print(int n) {
        System.out.println(n);
    }

    // 실수형 매개변수를 받는 메소드
    public void print(double n) {
        System.out.println(n);
    }
    
    // 문자열 매개변수를 받는 메소드
    public void print(string n) {
        System.out.println(n);
    }
}

위의 예시에서 Example 클래스에는 print라는 이름의 메소드가 세 번 정의되어 있다.

첫 번째 print() 메소드는 정수형을, 두 번째 print() 메소드는 실수형을, 세 번째 print() 메소드는 문자열 매개변수를 받는다.

이렇게 메소드 오버라이딩을 사용하여 print() 메소드만을 사용하여 정수형, 실수형, 문자열을 출력하는 것이 가능하다.

 

💡메소드 오버로딩 구현 불가능 조건


1. 매개변수의 개수와 자료형이 같으면 불가능하다. (매개변수의 이름만 같은 경우 불가능)
2. 반환값의 자료형이 다르더라도 불가능하다.

public static void test() {}
public static void test() {} // 매개변수의 개수가 같으므로 불가능

public static void test(int n) {}
public static void test(int m) {} // 매개변수의 개수와 자료형이 같으므로 불가능

public static int test() {} // 반환값의 자료형이 다르더라도 불가능

매개변수의 개수와 자료형이 같은 것은 이름만 다른 경우이므로 불가능하다.

메소드 오버로딩은 매개변수의 개수와 자료형에 의존한다는 점을 기억하며, 위와 같이 불가능한 조건을 알아두는 것이 좋다.