파라미터와 아규먼트
1. 기본값 설정하기
함수를 정의할 때 파라미터에 기본값을 설정할 수 있습니다. 파라미터의 뒤에 할당연산자(=
)를 이용해 기본값을 설정합니다. 함수 호출 시 인자를 전달하지 않으면 설정된 기본값이 사용됩니다. 매개변수는 인자를 왼쪽에서 오른쪽으로 순서대로 받습니다. 이때 전달된 인자가 없거나 undefined
일 경우 기본값이 사용됩니다.
함수를 호출할 때, 특정 파라미터에만 값을 전달하고 싶을 때는 어떻게 해야 할까요? 파라미터는 기본적으로 순서대로 전달되기 떄문에 다음과 같이 특정 파라미터를 지정해서 값을 전달하는 것은 불가능합니다. (c=1000)
과 (a=2000)
은 값을 반환하며 순서대로 a
, b
에 할당됩니다.
undefined
를 사용하여 값을 생략하고 특정 파라미터에만 값을 전달할 수는 있지만, 이는 가독성이 떨어지고 코드가 복잡해질 수 있습니다.
2. 구조 분해 할당
함수의 매개변수를 객체나 배열로 받을 때 구조 분해 할당을 사용할 수 있습니다. 구조 분해 할당을 사용하여 전달인자를 매개변수에 구조 분해 할당하여 사용할 수 있습니다.
함수의 매개변수를 객체나 배열로 받을 때 구조 분해 할당을 사용할 수 있습니다. 구조 분해 할당을 사용하여 인자를 매개변수에 구조 분해 할당하여 사용할 수 있습니다. 이를 통해 객체나 배열에서 원하는 값을 쉽게 추출할 수 있습니다.
함수의 매개변수를 객체로 받을 때는 객체의 속성명과 함수의 매개변수명이 일치해야 합니다. 속성명이 일치하지 않으면 undefined
가 할당됩니다. 이때 속성의 기본값을 설정할 수 있습니다. 전달된 객체에 해당 속성이 없을 때 기본값이 할당됩니다.
RORO 패턴
RORO는 "Recieve an Object, Return an Object"의 약자로, 구조 분해 할당을 이용하여 객체를 파라미터에 전달하고, 객체를 반환하는 방식을 말합니다.
이처럼 구조 분해 할당으로 파라미터를 전달하면 가독성이 높아지고, 필요한 값만 선택적으로 처리할 수 있습니다.
function createUser({ name, email }) {
// ... 로직
return { id, name, grade, email };
}
// 사용 예
const user = createUser({
name: 'licat',
email: 'licat@weniv.com',
});
console.log(user.id);
function createUser({ name, email }) {
// ... 로직
return { id, name, grade, email };
}
// 사용 예
const user = createUser({
name: 'licat',
email: 'licat@weniv.com',
});
console.log(user.id);
구조 분해 할당을 이용하는 경우 함수를 호출할 때 인자의 순서를 신경쓰지 않아도 되기 때문에 가독성이 높아집니다. 하지만 인자가 없는 경우는 어떻게 처리할까요?
전달되는 인자 없이 함수를 호출하면 오류가 발생합니다. 인자가 없는 경우 자동으로 할당되는 undefined
는 객체 또는 배열로 구조 분해 할당을 할 수 없기 때문입니다. 이를 방지하기 위해 빈 객체를 기본값을 설정할 수 있습니다.
가독성을 위해 구조 분해 할당을 함수 내부에서 처리할 수 있습니다. 이를 통해 함수의 매개변수를 단순하게 유지할 수 있습니다.
3. Rest 문법
Rest 문법은 여러 개의 요소를 하나의 배열로 묶는 역할을 합니다. 함수의 파라미터에 ...
를 붙여 함수 호출에 전달된 모든 인자를 묶어 배열로 만들 수 있습니다.
함수의 파라미터에는 하나의 rest
만 존재할 수 있으며, 반드시 마지막 매개변수로 와야합니다. 그렇지 않으면 에러가 발생합니다. 아래 코드에서 rest 문법을 이용해 매개변수를 처리합니다.
Rest 문법은 구조 분해 할당과 함께 사용될 수 있습니다. 구조 분해 할당을 사용하여 객체나 배열에서 원하는 값만 추출하고, 나머지 요소들을 배열로 묶어 처리할 수 있습니다.
rest 문법이 spread 문법이 똑같이 생겼어요!
rest 문법과 spread 문법은 ...
으로 표현합니다. spread 문법은 배열이나 객체를 펼쳐서 전개하는 역할을 하고, rest 문법은 여러 개의 요소를 하나의 배열로 묶는 역할을 합니다. 두 문법은 사용되는 위치에 따라 역할이 달라집니다.
자바스크립트 엔진은 일반적인 객체나 배열 안에서 사용되는 …
은 spread, 함수의 마지막 매개변수에 사용되는 …
은 rest 문법으로 인식합니다.