네, 가능합니다. 자바에서는 클래스 안에 같은 이름의 메서드를 여러 개 정의할 수 있습니다. 단, 각 메서드의 매개변수 타입이나 개수가 서로 달라야 한다는 조건이 필요합니다.
이처럼 같은 이름의 메서드를 매개변수만 다르게 하여 여러 개 정의하는 기법을 메서드 오버로딩(Method Overloading)이라고 부릅니다. 컴파일러는 메서드 호출 시 전달된 인자의 타입과 개수를 확인하여, 그에 맞는 적절한 메서드를 자동으로 선택합니다. 이는 자바에서 대표적인 컴파일 타임 다형성(정적 다형성)의 예이기도 합니다.
아래 예제에서는 세 개의 display() 메서드를 같은 이름으로 정의했지만, 매개변수 구성이 서로 다릅니다. 호출 시 어떤 인자를 전달하느냐에 따라 알맞은 메서드가 실행됩니다.
예제 코드
public class MethodWthSameNameTest {
public void display() { // 매개변수가 없는 메서드
System.out.println("display() method with no parameter");
}
public void display(String name) { // 매개변수가 하나인 메서드
System.out.println("display() method with a single parameter");
}
public void display(String firstName, String lastName) { // 매개변수가 여러 개인 메서드
System.out.println("display() method with multiple parameters");
}
public static void main(String args[]) {
MethodWthSameNameTest test = new MethodWthSameNameTest();
test.display();
test.display("raja");
test.display("raja", "ramesh");
}
}
실행 결과
display() method with no parameter display() method with a single parameter display() method with multiple parameters
오버로딩 시 주의사항
메서드 오버로딩이 성립하려면 매개변수의 타입, 개수, 순서 중 최소 하나 이상이 달라야 합니다. 반면 리턴 타입만 다른 경우에는 오버로딩으로 인정되지 않으므로 컴파일 오류가 발생한다는 점을 유의해야 합니다.