๐Ÿ’ป FE/๐Ÿ“ JS

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ bind ์–ธ์ œ ์“ฐ๋ƒ

Roy Miller 2025. 5. 14. 14:26

 

 

Function.prototype.bind() - JavaScript | MDN

bind() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฐ›๊ฒŒ๋˜๋Š” ์ฒซ ์ธ์ž์˜ value๋กœ๋Š” this ํ‚ค์›Œ๋“œ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ด์–ด์ง€๋Š” ์ธ์ž๋“ค์€ ๋ฐ”์ธ๋“œ๋œ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜์— ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

 

 

bind() ๋ฉ”์„œ๋“œ๊ฐ€ ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ๊ฒฝ์šฐ

 

1. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ this ์ปจํ…์ŠคํŠธ ๊ณ ์ •

<button id="myButton">Click Me</button>
const myObject = {
  name: 'MyObject',
  handleClick: function(event) {
    // bind๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ this๋Š” ๋ณดํ†ต <button> ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
    console.log(`ํด๋ฆญ ์ด๋ฒคํŠธ ๋ฐœ์ƒ!`);
    console.log(`this์˜ name ์†์„ฑ:`, this.name); // bind ๋•๋ถ„์— myObject์˜ name์— ์ ‘๊ทผ
    console.log(`์ด๋ฒคํŠธ ํƒ€์ž…:`, event.type);
  }
};

const button = document.getElementById('myButton');

// --- bind๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ (์ฃผ์„ ์ฒ˜๋ฆฌ) ---
// button.addEventListener('click', myObject.handleClick);
// ์ด ๊ฒฝ์šฐ, handleClick ๋‚ด๋ถ€์˜ this๋Š” ๋ฒ„ํŠผ ์š”์†Œ(<button>)๊ฐ€ ๋˜์–ด this.name์€ undefined ๋˜๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ๋ฉ๋‹ˆ๋‹ค.

// --- bind๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ this๋ฅผ myObject๋กœ ๊ณ ์ •ํ•œ ๊ฒฝ์šฐ ---
button.addEventListener('click', myObject.handleClick.bind(myObject));
// ์ด์ œ handleClick ๋‚ด๋ถ€์˜ this๋Š” ํ•ญ์ƒ myObject๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

console.log("๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด ๋ณด์„ธ์š”.");

์„ค๋ช…: myObject.handleClick ๋ฉ”์„œ๋“œ๋ฅผ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋กœ ์‚ฌ์šฉํ•  ๋•Œ, bind(myObject)๋ฅผ ํ†ตํ•ด handleClick ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๊ฐ€ ํด๋ฆญ๋œ ๋ฒ„ํŠผ ์š”์†Œ๊ฐ€ ์•„๋‹Œ myObject ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ this.name๊ณผ ๊ฐ™์ด ๊ฐ์ฒด์˜ ์†์„ฑ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์—์„œ this ์ปจํ…์ŠคํŠธ ๊ณ ์ • (setTimeout ์˜ˆ์‹œ)

const timerObject = {
  message: '์‹œ๊ฐ„์ด ๋‹ค ๋์Šต๋‹ˆ๋‹ค!',
  logMessage: function() {
    // bind๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ this๋Š” ์ „์—ญ ๊ฐ์ฒด ๋˜๋Š” undefined์ž…๋‹ˆ๋‹ค.
    console.log(this.message); // bind ๋•๋ถ„์— timerObject์˜ message์— ์ ‘๊ทผ
  }
};

// --- bind๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ (์ฃผ์„ ์ฒ˜๋ฆฌ) ---
// setTimeout(timerObject.logMessage, 1000);
// 1์ดˆ ํ›„ ์‹คํ–‰ ์‹œ logMessage ๋‚ด๋ถ€์˜ this๋Š” ์ „์—ญ ๊ฐ์ฒด ๋˜๋Š” undefined๊ฐ€ ๋˜์–ด this.message๋Š” ์˜ˆ์ƒ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

// --- bind๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ this๋ฅผ timerObject๋กœ ๊ณ ์ •ํ•œ ๊ฒฝ์šฐ ---
setTimeout(timerObject.logMessage.bind(timerObject), 1000);
// 1์ดˆ ํ›„ ์‹คํ–‰ ์‹œ logMessage ๋‚ด๋ถ€์˜ this๋Š” timerObject๊ฐ€ ๋˜์–ด ๋ฉ”์‹œ์ง€๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

console.log("1์ดˆ ํ›„ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.");

 

์„ค๋ช…: setTimeout์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ timerObject.logMessage๋ฅผ ์ „๋‹ฌํ•  ๋•Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝœ๋ฐฑ ๋‚ด๋ถ€์˜ this๋Š” ์ „์—ญ ๊ฐ์ฒด(window) ๋˜๋Š” undefined๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. bind(timerObject)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ logMessage๊ฐ€ ์‹คํ–‰๋  ๋•Œ this๊ฐ€ timerObject๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค.

 

3. ๊ฐ์ฒด์—์„œ ๋ฉ”์„œ๋“œ๋งŒ ๋ถ„๋ฆฌ ์‹œ this ์œ ์ง€

const calculator = {
  value: 10,
  add: function(a) {
    // bind๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ this๋Š” ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    return this.value + a;
  }
};

// ๋ฉ”์„œ๋“œ๋งŒ ๋ณ„๋„ ๋ณ€์ˆ˜์— ํ• ๋‹น
const addMethod = calculator.add;

// --- bind๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ---
// console.log(addMethod(5));
// addMethod๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด this๋Š” ์ „์—ญ ๊ฐ์ฒด ๋˜๋Š” undefined๊ฐ€ ๋˜์–ด
// this.value๋Š” ์˜ˆ์ƒ๋Œ€๋กœ 10์ด ์•„๋‹ˆ๋ฏ€๋กœ NaN ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


// --- bind๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ this๋ฅผ calculator๋กœ ๊ณ ์ •ํ•œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ƒ์„ฑ ---
const boundAddMethod = calculator.add.bind(calculator);

// boundAddMethod๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด this๊ฐ€ calculator๋กœ ๊ณ ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
console.log(`bind ์‚ฌ์šฉ ๊ฒฐ๊ณผ: ${boundAddMethod(5)}`); // ์ถœ๋ ฅ: bind ์‚ฌ์šฉ ๊ฒฐ๊ณผ: 15

 

์„ค๋ช…: calculator.add ๋ฉ”์„œ๋“œ๋ฅผ addMethod๋ผ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด, addMethod๋Š” ๋” ์ด์ƒ calculator ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ ์ทจ๊ธ‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. addMethod(5)์™€ ๊ฐ™์ด ๋…๋ฆฝ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด this๊ฐ€ ๊นจ์ง‘๋‹ˆ๋‹ค. bind(calculator)๋ฅผ ํ†ตํ•ด this๊ฐ€ ํ•ญ์ƒ calculator๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ boundAddMethod๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

4. ๋ถ€๋ถ„ ์ ์šฉ (์ธ์ž ๋ฏธ๋ฆฌ ์„ค์ •)

const displayInfo = function(prefix, suffix, data) {
  console.log(`${prefix} ${data} ${suffix}`);
};

// --- 'Log:' ์ ‘๋‘์‚ฌ์™€ '.' ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋ฏธ๋ฆฌ ์„ค์ •ํ•œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ƒ์„ฑ ---
const logWithSuffix = displayInfo.bind(null, 'Log:', '.'); // this๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์•„ null ์‚ฌ์šฉ

// ์ด์ œ logWithSuffix ํ•จ์ˆ˜๋Š” data ์ธ์ž ํ•˜๋‚˜๋งŒ ๋ฐ›์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
logWithSuffix('๋ฐ์ดํ„ฐ1'); // displayInfo('Log:', '.', '๋ฐ์ดํ„ฐ1') ์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™
logWithSuffix('๋ฐ์ดํ„ฐ2'); // displayInfo('Log:', '.', '๋ฐ์ดํ„ฐ2') ์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™

console.log("์ธ์ž๊ฐ€ ๋ฏธ๋ฆฌ ์„ค์ •๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.");

 

์„ค๋ช…: displayInfo ํ•จ์ˆ˜๋Š” ์„ธ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์ง€๋งŒ, bind(null, 'Log:', '.')๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ this๋Š” ๋ฌด์‹œํ•˜๊ณ (null ์‚ฌ์šฉ), ์ฒซ ๋‘ ์ธ์ž('Log:', '.')๋ฅผ ๋ฏธ๋ฆฌ ๊ณ ์ •ํ•œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ logWithSuffix๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ logWithSuffix๋Š” ๋‚˜๋จธ์ง€ ๋งˆ์ง€๋ง‰ ์ธ์ž(data)๋งŒ ๋ฐ›์•„๋„ displayInfo ํ•จ์ˆ˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ '๋ถ€๋ถ„ ์ ์šฉ'์ž…๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ๋“ค์„ ํ†ตํ•ด bind()๊ฐ€ this ๊ณ ์ •๊ณผ ์ธ์ž ์‚ฌ์ „ ์„ค์ •์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์—ญํ• ์„ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 


 

  • this ์ปจํ…์ŠคํŠธ ๊ณ ์ •: ์ด๊ฒƒ์ด bind()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ฃผ๋œ ๋ชฉ์ ์ด์ž ์ด์œ ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ์›๋ž˜ ๊ฐ์ฒด์˜ this๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฌ๋Š” ์ƒํ™ฉ์—์„œ this๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ณ ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ถ€๋ถ„ ์ ์šฉ (์ธ์ž ๋ฏธ๋ฆฌ ์„ค์ •): ์ธ์ž๋ฅผ ๋ฏธ๋ฆฌ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ bind()์˜ ์œ ์šฉํ•œ ํ™œ์šฉ๋ฒ•์ด์ง€๋งŒ, this ์ปจํ…์ŠคํŠธ ๋ฌธ์ œ ํ•ด๊ฒฐ๋งŒํผ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•(ํด๋กœ์ € ๋“ฑ)์œผ๋กœ ๋Œ€์ฒด๋˜๊ธฐ๋„ ์‰ฝ์Šต๋‹ˆ๋‹ค.
const greet = (greeting, name) => {
  console.log(`${greeting}, ${name}!`);
};

// 'Hello'๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฏธ๋ฆฌ ๊ณ ์ •ํ•œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
const sayHello = greet.bind(null, 'Hello');

sayHello('World'); // ์—ฌ๊ธฐ์„œ 'World'๋Š” ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
// ๊ฒฐ๊ณผ: Hello, World!

sayHello('Jane'); // ์—ฌ๊ธฐ์„œ 'Jane'์€ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
// ๊ฒฐ๊ณผ: Hello, Jane!

 


 

bind()๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. bind()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์›๋ณธ ํ•จ์ˆ˜์˜ this ๊ฐ’์„ ์˜๊ตฌ์ ์œผ๋กœ ๊ณ ์ •ํ•˜๊ณ , ์„ ํƒ์ ์œผ๋กœ ์ผ๋ถ€ ์ธ์ž๋ฅผ ๋ฏธ๋ฆฌ ์„ค์ •ํ•œ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ bind()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด์„œ ์›๋ณธ ํ•จ์ˆ˜๊ฐ€ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. bind()๋Š” "๋‚˜์ค‘์— ์‹คํ–‰๋  ํ•จ์ˆ˜์˜ ํ™˜๊ฒฝ์„ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด๋‘๋Š”" ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ bind()๊ฐ€ ํ™œ์šฉ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๊ฒฝ์šฐ

  1. this ์ปจํ…์ŠคํŠธ ๊ณ ์ •
    • ๋ฌธ์ œ: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜์˜ this ๊ฐ’์€ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜๋А๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•  ๋•Œ, ์›๋ž˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์†ํ•ด ์žˆ๋˜ ๊ฐ์ฒด์™€์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด์„œ this๊ฐ€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฐ’(์˜ˆ: ์ „์—ญ ๊ฐ์ฒด๋‚˜ undefined)์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • bind()์˜ ์—ญํ• : bind()๋Š” ์ด๋ ‡๊ฒŒ this ์ปจํ…์ŠคํŠธ๊ฐ€ ๊นจ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ this๊ฐ€ ํ•ญ์ƒ ์›๋ž˜ ์˜๋„ํ–ˆ๋˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ณ ์ •์‹œ์ผœ ์ค๋‹ˆ๋‹ค.
    • ์‹ค๋ฌด ์˜ˆ์‹œ:
      • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ: DOM ์š”์†Œ์— ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋ถ™์ผ ๋•Œ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ (element.addEventListener('click', myObject.handleClick.bind(myObject))) handleClick ๋‚ด๋ถ€์˜ this๊ฐ€ ํด๋ฆญ๋œ element๊ฐ€ ์•„๋‹Œ myObject๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
      • ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ: setTimeout, setInterval, Promise์˜ then ๋“ฑ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ๊ฐ์ฒด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ this๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
      • ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๋ฉ”์„œ๋“œ: React ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๋“ฑ์—์„œ ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ์œผ๋กœ ์ „๋‹ฌํ•  ๋•Œ this๊ฐ€ ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก bind๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค (์ตœ๊ทผ์—๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค ํ•„๋“œ ๋ฌธ๋ฒ•์œผ๋กœ ๋Œ€์ฒด๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค).
  2. ๋ถ€๋ถ„ ์ ์šฉ (Partial Application) - ์ธ์ž ๋ฏธ๋ฆฌ ์„ค์ •
    • ๋ฌธ์ œ: ์–ด๋–ค ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋ฐ, ์ด ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜(์˜ˆ: ์œ„ ์˜ˆ์‹œ์˜ combine)์˜ ์ฝœ๋ฐฑ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ฝœ๋ฐฑ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜(์˜ˆ: ํ•˜๋‚˜)์˜ ์ธ์ž๋งŒ ์ „๋‹ฌํ•˜๋„๋ก ๋˜์–ด ์žˆ์–ด, ์›๋ž˜ ํ•จ์ˆ˜๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋“  ์ธ์ž๋ฅผ ํ•œ ๋ฒˆ์— ์ „๋‹ฌ๋ฐ›๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
    • bind()์˜ ์—ญํ• : bind()๋Š” this ๊ฐ’ ๊ณ ์ •๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, bind() ํ˜ธ์ถœ ์‹œ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ ๊ฐ’๋“ค์„ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์›๋ณธ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋  ์ธ์ž๋“ค์˜ ๋งจ ์•ž์— ๊ณ ์ •์‹œ์ผœ ์ค๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ผ๋ถ€ ์ธ์ž๋ฅผ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด๋‘๊ณ  ๋‚˜๋จธ์ง€ ์ธ์ž๋Š” ๋‚˜์ค‘์— ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ถ€๋ถ„ ์ ์šฉ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    • ์‹ค๋ฌด ์˜ˆ์‹œ:
      • ๋ฒ”์šฉ ํ•จ์ˆ˜ ํŠน์ˆ˜ํ™”: ํŠน์ • ์„ค์ •๊ฐ’์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ง€๊ณ  ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฒ”์šฉ ํ•จ์ˆ˜๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (์œ„ ์˜ˆ์‹œ์˜ showResult ํ•จ์ˆ˜์ฒ˜๋Ÿผ, ๋ฉ”์‹œ์ง€ ํ…์ŠคํŠธ๋ฅผ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด๋‘” ๊ฒฐ๊ณผ ์ถœ๋ ฅ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ)
      • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ: ์ด๋ฒคํŠธ ๊ฐ์ฒด ์™ธ์— ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์— ์ถ”๊ฐ€๋กœ ๋„˜๊ฒจ์•ผ ํ•  ๋•Œ bind()์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋ถ€ํ„ฐ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค (์—ญ์‹œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์™€ ํด๋กœ์ €๋กœ ๋Œ€์ฒด๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค).