Java 오버로딩(overloading), 성립조건, 장점, 단점
by 볼빵빵오춘기오버로딩(overloading)
한 클래스 안에 같은 이름의 메서드 여러 개 정의하는 것
void println();
void println(boolean x);
void println(char x);
void println(char x);
void println(char[] x);
void println(double x);
void println(float x);
....
오버로딩이 성립하기 위한 조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입은 영향없다.
예제1
예제코드1
int add(int a, int b){return a+b;}
int add(int x, int y){return x+y;}
⇒ 조건 1번만 일치
⇒ 메서드 중복정의
⇒ 이럴땐 이미 메서드가 존재한다고 컴파일러가 error메세지 출력한다.
예제코드2
int add(int a, int b){return a+b;}
long add(int x, int y){return (long)x+y;}
⇒ 조건 1번 일치
⇒ 매개변수 타입과 갯수가 일치해서 조건2번 x
⇒ 반환타입도 달라 조건3번 x
⇒ 중복정의
예제코드3
long add(int a, long b){return a+b;} // 1
long add(long x, int y){return (long)x+y;} // 2
⇒ 조건 1,2,3 ok . 오버로딩 성립
⇒ 만약 예제코드3을 사용하고자 add(3,3)을 쓸 경우 1번라인과 2번라인 둘 다 가능하다 그러므로 컴파일러는 ambigous error를 나타낸다.
예제2
public class Hello2 {
public static void main(String[] args) {
MyMath3 mm = new MyMath3();
System.out.println("mm.add(3,3) 결과 : " +mm.add(3,3));
System.out.println("mm.add(3L,3) 결과 : " +mm.add(3L,3));
System.out.println("mm.add(3,3L) 결과 : " +mm.add(3,3L));
System.out.println("mm.add(3L,3L) 결과 : " +mm.add(3L,3L));
int[] a = {100,200,300};
System.out.println("mm.add(a) 결과 : " +mm.add(a));
}
}
class MyMath3{
long add(int a, long b){
System.out.print("long add(int a, long b) - ");
return a+b;
}
long add(long x, int y){
System.out.print("long add(long a, int b) - ");
return (long)x+y;
}
int add(int a,int b) {
System.out.print("int add(int a, int b) - ");
return a+b;
}
long add(long a,long b) {
System.out.print("long add(long a, long b) - ");
return a+b;
}
int add(int[] a) {
System.out.print("int add(int[] a) - ");
int result = 0;
for(int i =0; i< a.length;i++) {
result += a[i];
}
return result;
}
}
오버로딩의 장점
- 다형성을 구현할 수 있다.
- 코드의 가독성이 좋아진다.
- 메서드의 이름을 절약할 수 있다.
- 기능 예측이 쉬워진다.
오버로딩의 단점
비슷한 기능이 아닌 메서드를 동일한 이름으로 사용하여 공동으로 개발할 경우,
다른 개발자에게 오히려 혼동을 줄 수 있다.
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java 기본 생성자, 매개변수가 있는 생성자 (1) | 2023.11.29 |
---|---|
Java 생성자(constructor) (0) | 2023.11.28 |
Java 인스턴스 메서드 vs 클래스 메서드, static을 언제 붙이나? (0) | 2023.11.28 |
Java return문, 반환값 (0) | 2023.11.28 |
Java 메서드, 메서드 장점 · 작성 · 구성 · 구현부 (0) | 2023.11.28 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기