웹개발에서 함수를 사용할때 배우게 되는 함수 오버로딩(Overloading)에 대하여 알아봅니다. 이 것은 무엇이고 자바 그리고 자바스크립트에서의 차이점은 무엇일까요?
# 함수 오버로딩(Function overloading)
먼저 함수 오버로딩에 대하여 알아보겠습니다.
함수 오버로딩(overloading)은 사전적의미로 본다면
over loading~ 뭔가가 전달되어 읽혀진다로 생각할 수 있습니다. 즉, 함수에 전달되는 것은
인자(arguments)이므로 전달된 인자가 어떻게 읽혀지느냐와 관련이 있습니다. 그 어떻게는 아래에 설명하겠습니다.
함수(메소드) 이름은 동일하나 인자(매개변수)의 타입 및 개수가 다름
위와 같이 이름은 동일하나 전달할 인자의 타입이나 개수가 다름을 의미합니다. 자바를 예를들면 아래와 같이 선언하는 것을 의미합니다. 만약 두 배의 값을 반환하는 함수 doubleNum()을 만든다면 ~
void doubleNum(int num) {
printLn(num * 2);
}
위 함수 doubleNum()은 int 타입의 인자를 하나 받아 * 2를 곱한 후 반환합니다. 하지만 아래와 같이 동일한 이름을 가진 함수를 다시 선언하되 인자의 타입 및 개수를 바꾸면 어떻게 될까요?
void doubleNum(int num1, int num2) {
printLn((num1 + num2) * 2);
}
// 두 개의 값을 더한 후 2를 곱해 반환함
void doubleNum(string num) {
printLn('현재 값은' + num + '입니다.');
}
// 문자타입인 경우 그 값을 출력함
보시는 것처럼 같은 이름
세 개의 함수가 선언되었지만 모두 다른 동작을 하도록 만들 수 있습니다. 이 것이
오버로딩(Overloading)이라고 생각하시면 됩니다. 즉, 오버로딩을 사용하지 않아도 동일하게 구현할 수 있겠지만 오버로딩을 사용하면 아래와 같은 장점이 있습니다.
- 비슷한 기능을 수행하는 여러 함수를 만들 필요없음
위와 같은 장점은 코드가 복잡해지고 길어질수록 그 장점은 더 커지겠지요. 동일한 함수가 여러 번 반복 사용되야하는 경우 오버로딩은 반드시 필요합니다.
! 자바스크립트의 함수 오버로딩(overloading)
자바스크립트에서는 오버로딩이 존재하지 않지만 동작은 같게 만들 수 있습니다. 먼저 자바스크립트에서는 동일한 함수의 이름을 반복 선언할 수 없습니다.
인자의 개수를 다르게 하여도 먼저 선언된 함수가 뒤의 함수로 재선언되기 때문입니다. 즉 다음의 함수는 아래의 동작만 기능을 수행하게 됩니다.
function doubleNum(num) {
console.log(1)
}
function doubleNum(num) {
console.log(2);
}
// 실행하면 2만 출력됨
또한 자바스크립트는 타입 선언이 따로 지정하지 않기 때문에 타입에 따른 함수 선언도 다르게 존재할 수 없겠죠.