코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java Method Overloading

Java Method Overloading: 자바 메소드 오버로딩 가이드

  • *메소드 오버로딩 (Method Overloading)**은 같은 이름의 메소드를 여러 번 정의하는 기능입니다. 하지만 각 메소드는 매개변수의 개수, 타입, 또는 순서가 달라야 합니다. 즉, 메소드의 시그니처(매개변수의 타입과 개수)가 다르면, 동일한 메소드 이름을 사용할 수 있습니다. 이를 통해 같은 작업을 수행하면서 다양한 입력값을 처리할 수 있습니다.

이 가이드는 Java에서 메소드 오버로딩의 개념과 구현 방법을 설명하며, 다양한 예제를 통해 이를 어떻게 활용할 수 있는지 보여줍니다.


1. 메소드 오버로딩의 개념

메소드 오버로딩같은 이름의 메소드를 매개변수의 타입, 개수, 순서가 다르게 정의하여, 하나의 작업을 다양한 방식으로 처리할 수 있게 해줍니다.

메소드 오버로딩의 규칙:

  • 메소드 이름은 같아야 합니다.
  • 매개변수의 타입, 매개변수의 개수, 또는 매개변수의 순서가 달라야 합니다.
  • 반환 타입만 다르고 매개변수가 동일하면 오버로딩되지 않습니다.

2. 메소드 오버로딩의 예시

사용 예: add() 메소드 오버로딩

public class MethodOverloadingExample {
    // 두 개의 정수를 더하는 메소드
    public static int add(int a, int b) {
        return a + b;
    }

    // 세 개의 정수를 더하는 메소드
    public static int add(int a, int b, int c) {
        return a + b + c;
    }

    // 두 개의 실수를 더하는 메소드
    public static double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        System.out.println("두 정수의 합: " + add(10, 20));  // 출력: 30
        System.out.println("세 정수의 합: " + add(10, 20, 30));  // 출력: 60
        System.out.println("두 실수의 합: " + add(10.5, 20.3));  // 출력: 30.8
    }
}

설명:

  • 같은 이름add 메소드를 세 가지 방식으로 정의했습니다.
    • 정수 두 개를 더하는 메소드.
    • 정수 세 개를 더하는 메소드.
    • 실수 두 개를 더하는 메소드.
  • 메소드 오버로딩을 통해 다양한 입력값에 대해 같은 작업(덧셈)을 처리할 수 있습니다.

3. 매개변수의 개수가 다른 메소드 오버로딩

매개변수의 개수가 다른 경우에도 메소드를 오버로딩할 수 있습니다. 이는 동일한 작업을 수행하면서도 다양한 개수의 입력을 받을 수 있도록 합니다.

사용 예: 매개변수 개수가 다른 multiply() 메소드

public class MultiplyOverloadingExample {
    // 두 정수를 곱하는 메소드
    public static int multiply(int a, int b) {
        return a * b;
    }

    // 세 정수를 곱하는 메소드
    public static int multiply(int a, int b, int c) {
        return a * b * c;
    }

    public static void main(String[] args) {
        System.out.println("두 정수의 곱: " + multiply(2, 3));  // 출력: 6
        System.out.println("세 정수의 곱: " + multiply(2, 3, 4));  // 출력: 24
    }
}

설명:

  • multiply(int a, int b): 두 정수를 곱하는 메소드입니다.
  • multiply(int a, int b, int c): 세 정수를 곱하는 메소드입니다.
  • 매개변수 개수가 다르므로, 두 메소드는 오버로딩이 가능합니다.

4. 매개변수의 타입이 다른 메소드 오버로딩

매개변수의 타입이 다른 경우에도 메소드를 오버로딩할 수 있습니다. 예를 들어, 동일한 작업을 정수형, 실수형 등 다양한 타입의 값에 대해 처리할 수 있습니다.

사용 예: 매개변수 타입이 다른 print() 메소드

public class PrintOverloadingExample {
    // 정수를 출력하는 메소드
    public static void print(int a) {
        System.out.println("정수: " + a);
    }

    // 실수를 출력하는 메소드
    public static void print(double a) {
        System.out.println("실수: " + a);
    }

    // 문자열을 출력하는 메소드
    public static void print(String a) {
        System.out.println("문자열: " + a);
    }

    public static void main(String[] args) {
        print(100);  // 출력: 정수: 100
        print(3.14);  // 출력: 실수: 3.14
        print("Hello, Java!");  // 출력: 문자열: Hello, Java!
    }
}

설명:

  • print(int a): 정수를 출력하는 메소드입니다.
  • print(double a): 실수를 출력하는 메소드입니다.
  • print(String a): 문자열을 출력하는 메소드입니다.
  • 매개변수의 타입이 다르므로 메소드는 오버로딩될 수 있습니다.

5. 매개변수의 순서가 다른 메소드 오버로딩

매개변수의 순서가 다른 경우에도 메소드를 오버로딩할 수 있습니다. 단, 매개변수의 타입이 달라야 합니다.

사용 예: 매개변수 순서가 다른 concat() 메소드

public class ConcatOverloadingExample {
    // 문자열과 정수를 받아서 연결하는 메소드 (문자열 먼저)
    public static String concat(String str, int num) {
        return str + num;
    }

    // 정수와 문자열을 받아서 연결하는 메소드 (정수 먼저)
    public static String concat(int num, String str) {
        return num + str;
    }

    public static void main(String[] args) {
        System.out.println(concat("Java", 101));  // 출력: Java101
        System.out.println(concat(101, "Java"));  // 출력: 101Java
    }
}

설명:

  • concat(String str, int num): 문자열과 정수를 연결하는 메소드입니다.
  • concat(int num, String str): 정수와 문자열을 연결하는 메소드입니다.
  • 매개변수의 순서가 다르기 때문에 두 메소드는 오버로딩될 수 있습니다.

6. 반환 타입만 다른 경우 오버로딩 불가능

반환 타입만 다르고, 매개변수의 타입이나 개수가 동일한 경우에는 메소드를 오버로딩할 수 없습니다. 이는 Java 컴파일러가 메소드 시그니처만을 기준으로 메소드를 구분하기 때문입니다.

잘못된 예: 반환 타입만 다른 경우

public class ReturnTypeOverloadingExample {
    // 반환 타입이 int인 메소드
    public static int myMethod(int a) {
        return a;
    }

    // 반환 타입이 double인 메소드 (오버로딩 불가)
    // public static double myMethod(int a) {
    //     return a;
    // }

    public static void main(String[] args) {
        System.out.println(myMethod(10));  // 출력: 10
    }
}

설명:

  • *myMethod(int a)*와 **myMethod(int a)*는 매개변수의 타입과 개수가 같고, 오직 반환 타입만 다르기 때문에 오버로딩이 불가능합니다.

7. 가변인자와 메소드 오버로딩

  • *가변인자 (Varargs)**는 메소드의 매개변수 개수가 가변적일 때 유용하게 사용됩니다. 하지만, 가변인자고정된 매개변수가 혼재한 경우에는 메소드 호출 시 혼란이 발생할 수 있으므로 주의가 필요합니다.

사용 예: 가변인자와 오버로딩

public class VarargsOverloadingExample {
    // 정수 배열을 받아서 합을 구하는 메소드
    public static int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }

    // 정수 두 개를 더하는 메소드

 public static int sum(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        System.out.println("가변인자 합계: " + sum(1, 2, 3, 4));  // 출력: 10
        System.out.println("두 정수의 합: " + sum(5, 10));  // 출력: 15
    }
}

설명:

  • sum(int... numbers): 가변인자를 받아 여러 개의 정수를 더하는 메소드입니다.
  • sum(int a, int b): 정수 두 개를 더하는 메소드입니다.
  • 가변인자와 고정된 매개변수를 함께 사용할 때는 호출 시 명확한 매개변수를 전달해야 합니다.

8. 메소드 오버로딩을 사용하는 예시

8.1. max() 메소드 오버로딩

public class MaxOverloadingExample {
    // 두 정수 중에서 최대값 반환
    public static int max(int a, int b) {
        return (a > b) ? a : b;
    }

    // 세 정수 중에서 최대값 반환
    public static int max(int a, int b, int c) {
        return max(max(a, b), c);
    }

    public static void main(String[] args) {
        System.out.println("두 정수 중 최대값: " + max(10, 20));  // 출력: 20
        System.out.println("세 정수 중 최대값: " + max(10, 20, 30));  // 출력: 30
    }
}

8.2. area() 메소드 오버로딩 (직사각형, 원)

public class AreaOverloadingExample {
    // 직사각형의 넓이
    public static double area(double width, double height) {
        return width * height;
    }

    // 원의 넓이
    public static double area(double radius) {
        return Math.PI * radius * radius;
    }

    public static void main(String[] args) {
        System.out.println("직사각형 넓이: " + area(10, 5));  // 출력: 50.0
        System.out.println("원의 넓이: " + area(7));  // 출력: 153.93804002589985
    }
}


요약

Java의 메소드 오버로딩동일한 작업을 하는 여러 메소드를 매개변수의 타입, 개수, 순서에 따라 정의하여, 다양한 입력을 처리할 수 있도록 합니다. 메소드 오버로딩을 사용하면 코드가 더욱 유연하고 재사용 가능해집니다. 주의할 점은, 반환 타입만 다른 경우는 오버로딩이 불가능하며, 가변인자와 오버로딩을 함께 사용할 때는 명확한 호출 방식을 고려해야 합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com