๐Ÿ’ป๐Ÿ’€/๊ฐœ๋ฐœ

ํด๋ฆฌํ•„(Polyfill)์ด๋ž€

db2 2021. 9. 26. 22:23

ํด๋ฆฌํ•„

ํด๋ฆฌํ•„(Polyfill)์ด๋ž€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ง€์› ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€ํ™˜ํ•œ ์ฝ”๋“œ๋ฅผ ๋œปํ•œ๋‹ค. ํ•˜์œ„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ๋˜‘๊ฐ™์ด ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

Babel๊ณผ core-js

ํด๋ฆฌํ•„์„ ์œ„ํ•œ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์—๋Š” Babel์ด ์žˆ๋‹ค. Babel ๋‚ด๋ถ€์—๋Š” core-js๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํƒ‘์žฌ๋˜์–ด ES6 ์ดํ›„์˜ ๋ฌธ๋ฒ•๋“ค์„ ํด๋ฆฌํ•„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ฆฌํ•„ ๋”ฐ๋ผํ•ด๋ณด๊ธฐ

ES6์—์„œ ์ถ”๊ฐ€๋œ ๋ฐฐ์—ด์˜ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ map()์„ ES5๋กœ ๊ตฌํ˜„ํ•ด๋ณด์ž. mockMap()์€ map()๊ณผ ๊ฐ™์ด ๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

const nums = [1, 4, 9, 16];
const result = nums.mockMap((n) => n * 2);

console.log(result); // [2, 8, 18, 32]

๊ทธ ์ „์— Array.prototype์— mockMap()์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ฃผ์ž…ํ•ด์•ผ ๋ชจ๋“  ๋ฐฐ์—ด์ด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Array.prototype.mockMap = function (callback) {
  const arr = [];

  for (let i = 0; i < this.length; i++) {
    arr.push(callback(this[i], i, this));
  }

  return arr;
};

mockMap() ๋‚ด๋ถ€์—์„œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด(this)์„ ์ˆœํšŒํ•˜๋ฉด์„œ callback ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ this[i]๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” (n) => n * 2๊ฐ€ ์ฝœ๋ฐฑํ•จ์ˆ˜์— ํ•ด๋‹น๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ(this[i])๋“ค์— 2๊ฐ€ ๊ณฑํ•ด์ง„ ๊ฐ’์ด ๋ฆฌํ„ด๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ this[i]์— ์ด์–ด callback ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํ˜„์žฌ ์ธ๋ฑ์Šค(i)์™€ mockMap()์„ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด(this)์„ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๋‹ค. ์ด ๋‘ ๊ฐœ์˜ ์ธ์ž๋Š” (n, i, arr) => n * 2 ์™€ ๊ฐ™์€ ์‹์œผ๋กœ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์ˆ˜๊ฐ€ ์•„๋‹Œ ์˜ต์…˜ ์ธ์ž์ด๋‹ค.