본문으로 바로가기

[JAVA] 오버로딩

category Helloworld!/JAVA 2016. 6. 6. 22:07

1. 오버로딩이란?

- 메서드도 변수처럼 같은 클래스 내에 서로 구별될 수 있어야하기 때문에 각기 다른 이름을 사용

- 하지만 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수는 또는 타입이 다르면 같은 이름을 사용해서 메서드를 정의할 수 있음

- 이처럼 한 클래스내에 같은 이름의 메서드를 여러개 정의 하는 것을 메서드 오버로딩 또는 오버로딩이라함.


2. 오버로딩의 조건

- 메서드 이름이 같아야한다

- 매개변수의 개수 또는 타입이 달라야한다

- 매개변수는 같고 리턴 타입이 다른 경우는 오버로딩이 성립되지 않는다.

//조건 1 : 매개변수의 이름만 다른것은 오버로딩 성립하지 않음
int add(int a, int b) { return a+b; }
int add(int x, int y) { return x+y; }

//조건 2 : 매개변수 타입과 개수가 일치하므로 어떤 매소드가 호출된것인지 구분할 수 없으므로 오버로딩 성립하지 않음
int add(int a, int b) { return a+b; }
long add(int a, int b) { return (long)a+b; }

//조건 3 : 서로 순서가 다른 매개변수가 하나씩 선언. 매개 변수의 값에 의해 호출될 메서드가 구분 될 수 있으므로 오버로딩 성립
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
비록 사용자가 매개변수 순서를 외우지 않아도 되는 장점이 있지만,
add(3, 3L)과 같이 호출하면 첫번째 메서드가,
add(3L, 3)을 호출하면 두번째 메서드가 호출되겠지만, 이 경우 (3, 3)과 같이 호출 할 수 없다.
이와 같이 호출할 경우 두 메서드 중 어느 메서드가 호출된 것인지 할수 없기때문에 메서드를 호출하는 곳에 컴파일 에러간난다.

3. 오버로딩의 장점

- 하나의 이름으로 여러개의 메서드를 정의할 수 있으니 메서드 이름을 절약할 수 있다