Coding/JAVA

[JAVA]메서드 오버로딩

민톨이 2024. 8. 16. 02:51
728x90

📋 메서드 오버로딩(overloading)

- 이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것

- 같은 이름의 메서드를 여러개 정의했다는 뜻으로 이해

 

📋 오버로딩 규칙

- 메서드의 이름이 같아도 매개변수의 타입 및 순서가 다르면 오버로딩 가능 //반환 타입은 인정하지 않음

 

❗️오버로딩 실패 case

int add(int a, int b)
double add(int a, int b)

 

=> 메서드 이름과 매개변수의 타입이 같으므로 컴파일 오류가 발생한다. 반환 타입은 인정x

(메서드 이름과 매개변수 타입이 다 같은데 int/double같은 반환 타입만 다르게 하는 것은 인정하지 않는다는 소리)

int add(int a, int b)
int add(int c, int d)

 

이것도 단순히 변수명만 바꿨다해도 메서드 이름과 매개변수 타입이 다 같아서 인정x

 

 

// 매개변수의 갯수가 다른 case

package overloading;

public class Overloading1 {

    public static void main(String[] args) {
        System.out.println("1: " + add(1,2));
        System.out.println("2: " + add(1,2,3));
    }

    public static int add(int a, int b){
        System.out.println("1번 호출");
        return a + b;
    }

    public static int add(int a, int b, int c){
        System.out.println("2번 호출");
        return a +b +c;
    }
}

 

// 매개변수의 타입이 다른 case

package overloading;

public class Overloading2 {

    public static void main(String[] args) {
        myMethod(1,1.2); //1번 호출
        myMethod(1.2,1); //2번 호출
    }

    public static void myMethod(int a, double b){
        System.out.println("int a, double b");
    }
    public static void myMethod(double a, double b){
        System.out.println("double a, double b");
    }
}

 

// 반환타입과 매개변수의 타입이 다른 case

package overloading;

public class Overloading3 {
    public static void main(String[] args) {
        System.out.println("1: " + add(1,2)); //1번 호출 //1번 없애면 2번(자동형변환)
        System.out.println("2: " + add(1.2,1.5)); //2번 호출
    }

    public static int add(int a, int b){
        System.out.println("1번 호출");
        return a + b;
    }

    public static double add(double a, double b){
        System.out.println("2번 호출");
        return a + b;
    }
  
}

 

  📌 먼저 본인의 타입에 최대한 맞는 메서드를 찾아서 실행하고, 그래도 없으면 형 변환 가능한 타입의 메서드를 찾아 실행한다.

 

 

 


(김영한님의 자바입문 강의를 보고 정리한 글입니다)