쌓고 쌓다

[JAVA] 함수(메소드) 오버로딩 본문

프로그래밍/java

[JAVA] 함수(메소드) 오버로딩

승민아 2021. 12. 22. 21:41

함수(메소드) 오버 로딩

한 클래스 내에서 이름이 같은 함수를 여러 개 만들 수 있다. 조건이 아래와 같다.

1. 매개변수의 개수나 타입이 달라야 한다.

2. 이름이 같아야 한다.

 

 

함수의 이름이 같고 매개변수의 개수가 다른 경우

package com.company;
class Test
{

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

    public int Sum(int a,int b,int c) {
        return a + b + c;
    }

}

public class Main{


    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.Sum(5,6));
        System.out.println(test.Sum(10,10,10));


    }
}

sum이라는 같은 이름의 함수가 있지만, 매개변수의 개수가 다르기 때문에 출력은 타입과 개수가 같은 함수를 실행합니다.

 첫 Sum함수 실행에서 5+6을 더한 것이 출력이 되고, 두 번째 실행에서는 10+10+10을 출력합니다.

 

 

함수의 이름이 같고 개수가 같지만 매개변수가 다른 경우

package com.company;
class Test
{

    public void Sum(int a, int b) {
        System.out.println("1번째 함수 실행");
    }

    public void Sum(int a,double b) {
        System.out.println("2번째 함수 실행");
    }

}

public class Main{


    public static void main(String[] args) {
        Test test = new Test();
        test.Sum(5,6);
        test.Sum(4,4.5);


    }
}

첫 test 객체의 Sum 함수 실행 시 int형을 두 개를 받기에 첫 번째 Sum함수를 실행하고

두 번째 Sum실행 시 int와 double형을 받았기에 2번째 Sum함수를 실행합니다.

 

함수 오버 로딩의 실패

반환형이 다르다고 컴파일러가 구분할 수 있는 건 아닙니다.

아래와 같이 반환형만 다르게 한다면

package com.company;
class Test
{

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

    public double Sum(int a,int b) {
        return (double)(a+b);
    }

}

public class Main{


    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.Sum(5,6));
        System.out.println(test.Sum(5,6));


    }
}

컴파일러가 이미 Sum함수가 5,6번째 줄에 정의되어 있는데 왜 또 9번째 줄에 정의하냐고 에러를 일으킨다.

 

그러므로 함수 오버 로딩 시, 함수 이름이 같고, 매개변수의 타입이 다르거나, 개수가 달라야 한다.

'프로그래밍 > java' 카테고리의 다른 글

[JAVA] static / 전역 함수, 전역 변수  (0) 2021.12.23
[JAVA] 접근 지정  (0) 2021.12.22
[JAVA] 함수(메소드)의 매개변수  (0) 2021.12.21
[JAVA] 객체 배열  (0) 2021.12.21
[JAVA] this 와 this()  (0) 2021.12.21
Comments