자바스크립트 실행 환경
자바스크립트 런타임
React Native를 사용할 때, 자바스크립트 코드는 최대 세 가지 환경에서 실행될 수 있다:
- 대부분의 경우, React Native는 Hermes를 사용한다. Hermes는 React Native에 최적화된 오픈소스 자바스크립트 엔진이다.
- Hermes가 비활성화된 경우, React Native는 JavaScriptCore를 사용한다. JavaScriptCore는 Safari의 자바스크립트 엔진이다. iOS에서는 앱 내에서 쓰기 가능한 실행 메모리가 없기 때문에 JavaScriptCore는 JIT를 사용하지 않는다.
- Chrome 디버깅을 사용할 때, 모든 자바스크립트 코드는 Chrome 자체 내에서 실행되며, WebSockets를 통해 네이티브 코드와 통신한다. Chrome은 V8을 자바스크립트 엔진으로 사용한다.
이러한 환경들은 매우 유사하지만, 일부 불일치가 발생할 수 있다. 따라서 특정 런타임의 세부 사항에 의존하지 않는 것이 좋다.
자바스크립트 구문 변환기
구문 변환기를 사용하면 모든 인터프리터에서 지원되기를 기다리지 않고도 새로운 자바스크립트 구문을 활용해 코드를 작성할 수 있다. 이를 통해 개발 과정이 더욱 즐거워진다.
React Native는 Babel 자바스크립트 컴파일러와 함께 제공된다. Babel이 지원하는 변환 기능에 대한 자세한 내용은 Babel 문서를 참고한다.
React Native에서 활성화된 변환 기능의 전체 목록은 @react-native/babel-preset에서 확인할 수 있다.
변환 기능 | 코드 예제 |
---|---|
ECMAScript 5 | |
예약어 |
|
ECMAScript 2015 (ES6) | |
화살표 함수 |
|
블록 스코프 |
|
전개 연산자 호출 |
|
클래스 |
|
계산된 속성 |
|
상수 |
|
비구조화 할당 |
|
for…of |
|
함수 이름 |
|
리터럴 |
|
모듈 |
|
객체 간결 메서드 |
|
객체 축약 표기법 |
|
매개변수 |
|
나머지 매개변수 |
|
단축 속성 |
|
스틱키 정규식 |
|
템플릿 리터럴 |
|
유니코드 정규식 |
|
ECMAScript 2016 (ES7) | |
지수 연산자 |
|
ECMAScript 2017 (ES8) | |
비동기 함수 |
|
함수 후행 쉼표 |
|
ECMAScript 2018 (ES9) | |
객체 전개 |
|
ECMAScript 2019 (ES10) | |
선택적 catch 바인딩 |
|
ECMAScript 2020 (ES11) | |
동적 임포트 |
|
널 병합 연산자 |
|
옵셔널 체이닝 |
|
ECMAScript 2022 (ES13) | |
클래스 필드 |
|
스테이지 1 제안 | |
export default from |
|
기타 | |
Babel 템플릿 |
|
Flow |
|
ESM to CJS |
|
JSX |
|
객체 할당 |
|
React 디스플레이 이름 |
|
TypeScript |
|
폴리필
모든 지원되는 JavaScript 런타임에서도 많은 표준 함수를 사용할 수 있다.
브라우저
- CommonJS
require
console.{log, warn, error, info, debug, trace, table, group, groupCollapsed, groupEnd}
XMLHttpRequest
,fetch
{set, clear}{Timeout, Interval, Immediate}, {request, cancel}AnimationFrame
ECMAScript 2015 (ES6)
Array.from
Array.prototype.{find, findIndex}
Object.assign
String.prototype.{startsWith, endsWith, repeat, includes}
ECMAScript 2016 (ES7)
Array.prototype.includes
ECMAScript 2017 (ES8)
-
Object.{entries, values}
-
__DEV__