소프트웨어는 녹이 슨다.
- 비즈니스 변경 & 기획 변경 & 정책 변경
- 세상이 변하기 때문
- 계속 올라가는 버전과 호환성
소프트웨어가 지속적으로 발전하면서, 오래된 브라우저 또는 앱에서 기능을 지원하지 못하는 경우가 발생한다.
폴리필 ?
- 이전 버전의 브라우저에서 새로운 기능을 지원하기 위해 필요한 코드 조각이나 라이브러리이다.
- 예를들어 자바스크립의 forEach 함수를 사용하고 싶은데 forEach 함수가 없는 환경이다. 하지만 폴리필을 작성하면 사용할 수 있다!
core-js
,regenerator-runtime
도 폴리필의 일종이다. 라이브러리를 보면 내부 코드가 어떻게 구현되어 있는지 찾아 볼 수 있다.- 코어 js는 개인 개발자가 만든 라이브러리인데 왕을 먹었다고 한다 ㅋㅋ
//"forEach" 폴리필 작성
if (!Array.prototype.forEach) {
Array.prototype.forEach = function (callback, thisArg) {
if (this == null) {
throw new TypeError("this is null or not defined");
}
for (var i = 0; i < this.length; i++) {
callback.call(thisArg, this[i], i, this);
}
};
}
// 이제 "forEach" 메서드 사용 가능
var numbers = [1, 2, 3];
numbers.forEach(function (number) {
console.log(number);
});
폴리필이 되는 이유는 몽키?패치?
자바스크립트는 런타임에 동작하는 프로그래밍 언어라 사용자가 프로그래밍 언어를 런타임에 조작하고 바꿀 수 있다.
즉, 나만의 폴리필 언어를 구현할 수 있는것
Array.prototype.map = function () {
//나만의 폴리필 코드를 구현할 수 있다!!
};
babel 만 있으면 장땡 아냐?
- 바벨(Babel)은 JavaScript 코드를 다른 버전의 JavaScript 코드로 변환해주는 도구이다.
- 바벨을 사용하면 최신 버전의 JavaScript 문법을 이전 버전인 ES5 문법으로 변환할 수 있다. 그러나 ES5에서 지원하지 않는 일부 ES6 기능(예: Map, Promise, Set, Object.assign() 등)은 이렇게 간단하게 변환할 수 없기 때문에, 이러한 기능을 사용하려면 폴리필(polyfill)을 사용해야 한다.
- 바벨의 이전 버전에서는
babel-polyfill
모듈을 사용하여 폴리필을 제공했지만 deprecated되었다.core-js
와regenerator-runtime
과 같은 라이브러리를 직접 사용하도록 권장하고 있다.
Reference
https://ddingg.tistory.com/entry/Javascript-Event와-Polyfill-babel