call, bind, apply 의 차이점은 무엇인가요?

0

기술면접 - JS

목록 보기
17/18

call, bind, apply 의 차이점은 무엇인가요?

call, bind, apply는 JavaScript에서 함수를 호출하고 함수의 this 값과 인수를 설정하는 데 사용되는 메서드입니다. 이들의 차이점은 다음과 같습니다:

1. call: call 메서드는 함수를 호출하는 동시에 함수 내의 this 값을 설정하고, 인수를 개별적으로 전달합니다. call 메서드는 함수를 호출하는 즉시 실행되며, 첫 번째 인수로 전달된 객체가 함수 내의 this 값으로 설정됩니다. 그 이후의 인수는 호출된 함수의 매개변수로 전달됩니다.

function sayHello(message) {
  console.log(message, this.name);
}

const person = { name: 'John' };

sayHello.call(person, 'Hello'); // 출력: Hello John

2. bind: bind 메서드는 함수를 호출하는 것이 아니라, 함수를 새로운 컨텍스트와 함께 묶어 새로운 함수를 생성합니다. 즉, bind 메서드를 호출하면 새로운 함수가 반환됩니다. 이 새로운 함수는 원래 함수와 동일한 기능을 가지지만, bind 메서드에 전달한 객체가 새로운 함수의 this 값으로 설정됩니다. 그리고 필요에 따라 추가 인수를 바인딩한 새로운 함수를 생성할 수도 있습니다.

function sayHello(message) {
  console.log(message, this.name);
}

const person = { name: 'John' };
const boundFn = sayHello.bind(person);

boundFn('Hello'); // 출력: Hello John

3. apply: apply 메서드는 함수를 호출하는 동시에 함수 내의 this 값을 설정하고, 인수를 배열로 전달합니다. apply 메서드는 첫 번째 인수로 전달된 객체가 함수 내의 this 값으로 설정되고, 두 번째 인수로 전달된 배열이 호출된 함수의 매개변수로 전달됩니다.

function sayHello(message) {
  console.log(message, this.name);
}

const person = { name: 'John' };

sayHello.apply(person, ['Hello']); // 출력: Hello John

요약하자면, callapply는 함수를 호출하고 this 값과 인수를 설정하는 데 사용되며, bind는 함수를 새로운 컨텍스트와 함께 묶어 새로운 함수를 생성합니다. callapply는 호출과 설정을 동시에 처리하고, bind는 호출 대신 새로운 함수를 반환합니다.

call과 달리 apply에서 배열을 사용하는 이유

apply() 함수는 call()과 비교하여 배열을 인자로 전달하는 이유는 다음과 같습니다:

1. 가변 인자 함수에 배열을 전달할 수 있음: JavaScript에서는 함수의 인자 개수가 고정되어 있지 않은 가변 인자 함수를 정의할 수 있습니다. apply()를 사용하여 배열을 전달하면 배열의 요소들이 함수의 가변 인자로 전달됩니다. 이는 함수가 얼마나 많은 인자를 받을지 알 수 없는 상황에서 유용합니다.

2. 함수의 인자를 동적으로 결정할 수 있음: apply()를 사용하여 함수를 호출할 때, 배열을 사용하여 인자를 동적으로 결정할 수 있습니다. 배열을 조작하거나 다른 방식으로 인자를 동적으로 생성한 후 apply()를 호출할 수 있습니다.

3. 기존 배열의 요소를 함수의 인자로 활용할 수 있음: 이미 배열로 데이터가 구성되어 있다면, apply()를 사용하여 해당 배열을 함수의 인자로 활용할 수 있습니다. 이는 코드의 가독성과 유지 보수를 향상시키는 데 도움이 될 수 있습니다.

따라서 apply() 함수는 배열 형태의 인자를 사용하여 함수를 호출할 수 있도록 함으로써, 가변 인자 함수를 다루거나 인자를 동적으로 결정하는 등의 유연성을 제공합니다.

profile
지치지 않는 백엔드 개발자 김성주입니다 :)

0개의 댓글

관련 채용 정보