arguments 객체란 무엇인가?
JavaScript에서 함수 내부에 자동으로 생성되는 arguments 객체는 해당 함수에 전달된 모든 인수를 담고 있는 유사 배열(array-like) 객체입니다. 인덱스와 length 속성을 가지고 있어 배열처럼 보이지만, 실제 배열이 아니기 때문에 sort(), map(), filter()와 같은 배열 메서드를 직접 호출할 수 없다는 한계가 있습니다.
이러한 문제를 해결하려면 arguments 객체를 진짜 배열로 변환해야 합니다. 가장 간단하고 널리 권장되는 방법은 ES6에서 도입된 Array.from() 메서드를 사용하는 것입니다.
Array.from() 메서드로 변환하기
Array.from()은 유사 배열 객체나 반복 가능한(iterable) 객체를 새로운 배열 인스턴스로 만들어 주는 정적 메서드입니다. 다음 예제는 arguments 객체를 배열로 변환한 뒤 sort() 메서드로 정렬하는 코드입니다.
예제 코드
<!DOCTYPE html>
<html>
<body>
<script>
function sortArg() {
var args = Array.from(arguments);
return args.sort();
}
document.write(sortArg('x', 'y', 'z', '20', '66', '35', 'john', 'david'));
</script>
</body>
</html>
코드 설명
sortArg()함수는 여러 개의 문자열 인수를 전달받습니다.- 함수 내부에서
Array.from(arguments)가arguments객체를 실제 배열로 변환하여args변수에 저장합니다. - 배열로 변환되었기 때문에
sort()메서드를 사용할 수 있으며, 요소들은 기본적으로 사전 순(문자열 기준)으로 정렬됩니다. - 실행 결과로
20,35,66,david,john,x,y,z가 출력됩니다. 숫자처럼 보이는 값도 문자열로 전달되었기 때문에 사전 순으로 정렬된 점에 유의하세요.
대안: 스프레드 연산자(Spread Operator)
ES6 이상 환경이라면 스프레드 연산자(...)를 활용하는 방법도 있습니다. 코드가 더 간결하고 가독성이 좋아 최근에는 이 방식이 자주 사용됩니다.
function sortArg() {
var args = [...arguments];
return args.sort();
}
정리
arguments 객체는 배열이 아니므로 배열 메서드를 사용하려면 먼저 변환이 필요합니다. Array.from(arguments) 또는 [...arguments]를 사용하면 손쉽게 실제 배열로 변환할 수 있으며, 이후 sort(), map(), filter() 등 다양한 배열 메서드를 자유롭게 활용할 수 있습니다.