쌓고 쌓다
[JAVA] 함수(메소드) 오버로딩 본문
함수(메소드) 오버 로딩
한 클래스 내에서 이름이 같은 함수를 여러 개 만들 수 있다. 조건이 아래와 같다.
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