오버로딩(Overloading)은 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 정의할 수 있는 기능이다. 자바에서는 매개변수의 개수 또는 타입이 다르면, 같은 이름의 메서드를 사용할 수 있다. 즉, 메서드 이름은 같지만, 매개변수 목록이 다르면 자바는 이를 다른 메서드로 구분한다. 이처럼 같은 이름의 메서드를 여러 개 정의하는 것을 메서드 오버로딩이라고 한다.
메서드 이름이 같아야 한다.
public void something() { }
public void something(int a) { }
public void something(int a, int b) { }
public void something(int a, double b) { }
매개변수의 개수 또는 타입이 달라야 한다.
리턴 타입이 다르다고 오버로딩이 성립되지 않는다.
리턴 타입은 메서드 오버로딩에 영향을 주지 않는다. 자바는 메서드 호출 시 매개변수의 개수와 타입을 기준으로 메서드를 구분하므로, 리턴 타입이 다르다고 해서 오버로딩이 성립되는 건 아니다.
public int add(int a) { return a; }
public void add(int a) { } // 리턴 타입만 다른 경우 오버로딩 불가
코드의 재사용성
같은 기능을 제공하는 메서드에서 매개변수의 타입이나 개수만 다른 경우, 같은 이름을 사용해 코드의 일관성을 유지하고, 중복된 코드를 줄일 수 있다.
가독성 향상
여러 메서드에 다른 이름을 붙이지 않아도 되므로 코드 가독성이 높아진다. 메서드 이름만 보고도 어떤 기능을 수행하는지 쉽게 파악할 수 있다.
유연성
오버로딩 덕분에 다양한 입력 형태에 맞춰 메서드를 사용할 수 있다. 예를 들어, 입력으로 정수를 받을 수도 있고, 실수를 받을 수도 있으며, 여러 개의 값을 받을 수도 있다.
가변인자는 메서드의 매개변수 개수를 동적으로 지정할 수 있게 해주는 기능이다. 만약 메서드가 다양한 매개변수 개수를 처리해야 한다면, 매번 메서드를 오버로딩하기보다는 가변인자를 사용하여 유연하게 처리할 수 있다.
...
을 붙여서 선언한다. 배열처럼 동작하지만, 가변인자는 호출 시 입력값의 개수를 유동적으로 받을 수 있다.public void sum(String... strings) {
for (String str : strings) {
System.out.println(str);
}
}
가변인자는 내부적으로 배열을 사용한다.
sum
메서드는 호출될 때마다 전달된 값을 배열로 받아 처리한다.빈 인자값도 허용된다.
가변인자 외에 다른 매개변수가 있을 경우, 가변인자는 반드시 마지막에 선언해야 한다.
public void sum(String prefix, String... strings) {
for (String str : strings) {
System.out.println(prefix + str);
}
}
public class VarargsExample {
// 가변인자를 사용하는 메서드
public void sum(String... strings) {
for (String str : strings) {
System.out.println(str);
}
}
public void sum(String prefix, String... strings) {
for (String str : strings) {
System.out.println(prefix + str);
}
}
public static void main(String[] args) {
VarargsExample example = new VarargsExample();
example.sum("a", "b", "c"); // 가변인자 호출
example.sum(); // 인자 없이도 호출 가능
example.sum("Prefix: ", "x", "y", "z"); // 다른 매개변수와 함께 호출
}
}
- 메서드 오버로딩은 같은 이름을 가진 메서드를 매개변수의 개수나 타입에 따라 여러 개 정의하는 기능으로, 이를 통해 코드의 재사용성과 가독성을 높일 수 있다.
- 가변인자는 매개변수의 개수가 유동적으로 달라질 때 사용하는 기능으로, 동적으로 여러 값을 처리할 수 있다. 가변인자는 배열처럼 동작하며, 호출 시 입력된 값의 개수에 따라 메서드가 유연하게 동작하게 만든다.