한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것을 **메소드 오버로딩(method overloading)**또는 **오버로딩(overloading)**이라고 한다.
같은 이름이지만 매겨변수의 개수 또는 타입이 달라야한다.
- 메소드의 이름이 같아야 한다.
반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.
대표적인 예로는 println메소드이다. println의 매개변수로는 null
, boolean
, char
, char[]
, double
, float
, int
, long
, Object
, String
가 각각 오버로딩되어있다.
같은 기능을 하지만 다른 매개변수 타입을 가지는 메서드를 다른이름을 써서 정의할 필요가 없어진다. 이름을 쉽게 지을 수 있고, 기억하기 쉽고, 기능을 예측하기 쉽다.
기존에는 메소드의 매개변수 개수가 고정적이였으나 JDK1.5부터 동적으로 지정해 줄 수 있게 되었으며, 이 기능을 **가변인자(variable arguments)**라고 한다.
가변인자는 **'타입... 변수명'**과 같은 형식으로 선언하며, PrintStream클래스의 printf()가 대표적인 예이다.
public PrintStream printf(String format, Object... args) { ... }
위와 같이 가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다.