[자바] 오버로딩

June·2021년 1월 1일
0

자바

목록 보기
8/36

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

이처럼, 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩(method overloading)' 또는 간단히 오버로딩(overloading)'이라 한다.

오버로딩의 조건

  1. 메서드 이름이 같아야 한다
  2. 매개변수의 개수 또는 타입이 달라야 한다.
    -반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

오버로딩의 예로 가장 대표적인 것은 println 메서드이다. println 메서드를 호출할 때 매개변수로 지정하는 값의 타입에 따라서 호출되는 println메서드가 달라진다.

가변인자(varargs)와 오버로딩

기존에는 메서드의 매개변수 개수가 고정적이었으나, JDK1.5부터 동적으로 지정해 줄 수 있게 되었으며, 이 기능을 가변인자(variable arguments)라고 한다.
가변인자는 '타입... 변수명'과 같은 형식으로 선언하며, PrintStream 클래스의 printf()가 대표적인 예이다.

public PrintStream printf(String format, Object... args) {}

위와 같이 가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수에서 제일 마지막에 선언해야 한다.

String concatenate(String s1, String s2) {}
String concatenate(String s1, String s2, String s3) {}
String concatenate(String s1, String s2, String s3, String s3) {}

String concatenate(String... str) {}

이 메서드를 호출할 때는 아래와 같이 인자의 개수를 가변적으로 할 수 있다. 심지어는 인자가 아예 없어도 되고 배열도 인자가 될 수 있다.

System.out.println(concatenate());
System.out.println(concatenate("a"));
System.out.println(concatenate("a", "b"));
System.out.println(concatenate(new String[]{"A", "B"}));

가변인자는 내부적으로 배열을 이용하는 것이다. 그래서 가변인자가 선언된 메서드를 호출할 때마다 배열이 새로 생성된다. 가변인자가 편리하지만, 이런 비효율이 숨어있으므로 꼭 필요한 경우에만 가변인자를 사용하자.

0개의 댓글