반응형
오버로딩(overloading)이란?
사전적 의미는 많이 싣는 것을 뜻한다.
한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메서드를 정의할 수 있다.
보통 하나의 메서드 이름에 하나의 기능만을 구현해야 하는데 여러기능을 구현하기 때문에 오버로딩(많이 싣는 것)이라고 한다.
같은 일을 하지만 매개변수를 달리해야하는 경우에 오버로딩을 구현한다.
오버로딩의 조건
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 반환 타입(return type)은 아무 상관이 없다.
메서드의 이름이 같다 하더라도 매개변수가 다르기 때문에 서로 구별될 수 있어 오버로딩이 가능하다.
int add(int a, int b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
// 반환타입(return type)이 달라도 매개변수가 같으면 오버로딩이 불가능하다.
long add(int a, int b, int c) {
return (long)a + b + c;
}
오버로딩의 장점
같은 일을 하는 메서드들이지만, 서로 다른 이름을 가진다면 이름을 짓기 어렵고 기억하기 어렵다.
반면 오버로딩 한다면 메서드 이름을 절약하고 기억하기 쉽다.
가변인자(varargs)와 오버로딩
기존 메서드에는 매개변수 개수가 고정적이였으나 JDK1.5 이후부터 동적으로 지정할 수 있는 가변인자(variable argument)를 사용할 수 있다.
가변인가 외에도 매개변수가 더 있다면 가변인자를 제일 마지막에 선언해야 한다.
가변인자를 선언한 메서드를 오버로딩하면 호출했을때 구별되지 못하는 경우가 발생하므로, 가능하면 가변인자를 사용한 메서드는 오버로딩하지 않는것이 좋다.
public PringStream printf(String format, Object... args) {
...
}
반응형
'Java' 카테고리의 다른 글
변수의 초기화 (0) | 2021.09.14 |
---|---|
재귀호출(recursive call) (0) | 2021.09.14 |
생성자(constructor) (0) | 2021.09.14 |
메서드(method) (0) | 2021.09.13 |
선언위치에 따른 변수의 종류 (0) | 2021.09.13 |