본문 바로가기
  • 🕊️ A Piece of Peace
🖥️ PC/JAVA

10. 메소드 오버로딩

by Moom2n 2024. 6. 26.

메소드 오버로딩은 같은 이름의 메소드를 여러 개 정의하되, 각 메소드가 서로 다른 파라미터 목록을 가지도록 하는 기법입니다. 이는 다형성의 한 형태로, 다양한 입력에 대해 동일한 작업을 수행하기 위해 사용됩니다.

정의

같은 이름의 메소드여도, 파라미터 개수나 타입에 따라 다른 메소드가 실행됩니다. 이를 메소드 오버로딩이라고 합니다. 예를 들어, 다음과 같이 두 개의 add 메소드를 정의할 수 있습니다.

예제 코드

public class MethodOverloading {
    static int add(int i, int j) {
        return i + j;
    }

    static int add(int i, int j, int k) {
        return i + j + k;
    }

    public static void main(String[] args) {
        int i = add(1, 2);
        int j = add(1, 2, 3);
        System.out.println(i + j); // 출력: 9
    }
}

 

이처럼 같은 이름의 메소드를 정의하고, 파라미터의 개수나 타입에 따라 적절한 메소드가 실행됩니다. 이는 정적 바인딩(컴파일 시점에 바인딩)으로 처리됩니다.

메소드 시그너처

컴파일러는 메소드 시그너처를 사용하여 클래스의 메소드를 구분합니다. 각 클래스에서 각 메소드의 시그너처는 유일해야 합니다. 메소드 시그너처는 메소드의 이름, 파라미터의 타입, 파라미터의 개수로 구성됩니다.

예제 코드

public class MethodSignature {
    static int doSomething(int n) {
        return n;
    }

    // 아래 메소드는 컴파일 오류 발생: 시그너처가 동일함
    // static String doSomething(int n) {
    //     return "Hello";
    // }
}

 

메소드 시그너처는 반환 타입을 포함하지 않습니다. 따라서 위 두 메소드는 같은 시그너처로 판단되어 컴파일 시 오류가 발생합니다.

오버로드 된 메소드 사용

메소드 오버로딩을 통해 다양한 입력에 대해 유연하게 대응하는 메소드를 작성할 수 있습니다. 예를 들어, 다음과 같은 인사말을 출력하는 메소드를 정의할 수 있습니다.

예제 코드

public class Greetings {
    enum TimeOfDay {Morning, Afternoon, Evening}

    static void greet() {
        System.out.println("Hello");
    }

    static void greet(String name) {
        System.out.println("Hello " + name);
    }

    static void greet(String name, TimeOfDay timeOfDay) {
        String message = "";

        switch (timeOfDay) {
            case Morning:
                message = "Good morning, ";
                break;
            case Afternoon:
                message = "Good afternoon, ";
                break;
            case Evening:
                message = "Good evening, ";
                break;
        }
        System.out.println(message + name);
    }

    public static void main(String[] args) {
        greet();
        greet("Kitty");
        greet("Crab", TimeOfDay.Morning);
    }
}

 

출력 결과

 

이 예제에서는 greet 메소드를 세 가지 형태로 오버로딩하여, 파라미터의 유무와 타입에 따라 적절한 인사말을 출력합니다. 이는 다양한 상황에 유연하게 대응할 수 있는 코드를 작성하는 데 매우 유용합니다.

디버깅과 유지보수가 어려울 수 있다는 단점이 있지만, 메소드 오버로딩을 통해 코드의 재사용성을 높이고, 코드의 가독성을 향상시킬 수 있습니다.

'🖥️ PC > JAVA' 카테고리의 다른 글

11. 패키지  (0) 2024.06.26
9. 파라미터  (0) 2024.06.26
8. 메소드  (0) 2024.06.26
7. 예외처리 Exception  (0) 2024.06.26
6. 자바의 기본 데이터 타입 (Primitive Data Types)  (0) 2024.06.26