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; } }

오버로딩의 장점
- 다형성을 구현할 수 있다.
- 코드의 가독성이 좋아진다.
- 메서드의 이름을 절약할 수 있다.
- 기능 예측이 쉬워진다.
오버로딩의 단점
비슷한 기능이 아닌 메서드를 동일한 이름으로 사용하여 공동으로 개발할 경우,
다른 개발자에게 오히려 혼동을 줄 수 있다.

블로그의 정보
Hello 춘기's world
볼빵빵오춘기