JavaScript에서 함수 오버로딩이란?
함수 오버로딩(Function Overloading)은 하나의 함수가 전달받은 인수의 개수나 종류에 따라 서로 다른 작업을 수행하는 기법입니다. 동일한 함수 이름으로 다양한 상황에 대응할 수 있어 코드의 유연성이 높아지지만, 잘못 구현하면 성능 저하로 이어질 수 있습니다.
함수 오버로딩 구현 시 핵심 원칙
매개변수를 활용한 함수 오버로딩을 구현할 때 가장 중요한 모범 사례는 타입 검사를 하지 않는 것입니다.
typeof 연산자 등으로 인수의 타입을 일일이 확인하면 실행 속도가 느려지기 때문에, 이러한 타입 체크는 피해야 합니다. 대신 메서드의 마지막 매개변수를 객체(Object) 형태로 받도록 설계하는 것이 효율적입니다.
또한 인수의 개수(arguments.length)를 검사하지 않는 것도 마찬가지로 중요합니다. 인수 길이를 확인하는 로직 역시 불필요한 연산 비용을 발생시키며, 객체 매개변수 방식을 사용하면 자연스럽게 이 문제를 회피할 수 있습니다.
예제 코드
다음은 위 원칙을 적용한 예시입니다.
function display(a, b, value) {
}
display(30, 15, {"method":"subtract"});
display(70, 90, {"test":"equals", "val":"cost"});위 예제에서 display 함수는 세 번째 매개변수로 객체를 받습니다. 호출자는 필요한 옵션을 객체 프로퍼티로 전달하기 때문에, 함수 내부에서 타입이나 인수 개수를 검사할 필요 없이 객체의 내용만 참조하면 됩니다. 이렇게 하면 오버로딩처럼 동작하면서도 성능 저하 없이 깔끔하고 확장 가능한 코드를 작성할 수 있습니다.
정리
- 타입 검사(typeof)는 성능 저하의 원인이므로 피한다.
- 마지막 매개변수를 객체로 받아 유연성을 확보한다.
- 인수 개수(arguments.length) 검사도 불필요한 비용이므로 지양한다.