[Java기초이론] 오버로딩(overloading)

less than 1 minute read

오버로딩이란?

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

오버로딩의 조건

1. 메서드의 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.

오버로딩의 장점

근본적으로 같은 기능을 하는 메서드이지만 서로 다른 이름을 가져야 하기 때문에 메서드를 작성하는 쪽에서는 이름을 짓기도 어렵고, 메서드를 사용하는 쪽에서는 이름을 일일이 구분해서 기억해야하기 때문에 부담이 된다.

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

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

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

위와 같은 형식을 가변인자로 사용하면 하나로 간단히 대체할 수 있다.

String concatenate(String... str){ ... }

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