💡 React-Native는 자바스크립트로 iOS와 Android를 동시에 개발하고 빌드할 수 있는 네이티브 모바일 애플리케이션 프레임워크입니다.
수정 > 컴파일 > 새로고침
등의 작업을 생략하고 불필요한 작업시간을 줄일 수 있다.RN(React Native)
이 네이티브 코드로 전환된다는 장점은 있으나 각 애플리케이션 개발에 있어 새로운 기능이 나올 시 리액트 네이티브가 이를 지원하기까지 기다려야된다는 단점이 있다.React
와 달리 React Native
는 디버깅이 어려워 개발 단계에서 문제가 생겼을 때 문제의 원인을 찾기까지 많은 시간이 소요된다.리액트 네이티브가 네이티브 코드로 변환되는 과정에는 Bridge
가 필요하다.
리액트 네이티브에는 자바스크립트 코드를 이용해서 네이티브 계층과 통신할 수 있도록 연결해주는 역할의 브릿지(bridge)
가 있다.
JavaScript Thread
: 자바스크립트의 코드가 실행되는 장소 *(보통 리액트 코드로 구성되어있다.)Native
: 네이티브 계층 코드Main Thread
: UI
를 담당하는 메인 스레드Shadow Thread
: 백그라운드 스레드로 레이아웃을 계산하는데 사용된다.Native Module
: 각 모듈의 자체 스레드다음 그림과 같이 Bridge
가 자바스크립트 스레드에서 정보를 받아 네이티브로 전달하게 된다. 이렇게 RN
이 기기와 통신하는 모든 자바스크립트의 기능을 분리된 스레드로 처리하면서 성능 향상을 가져온다.
💡 Virtual DOM이란? 데이터가 업데이트 될 경우 자동으로 화면을 다시 그리는 가상의 DOM이다.
실제 DOM은 화면에 나타나는, 즉 우리가 볼 수 있는 DOM이고
가상 DOM은 비교를 위해서만 존재하고 화면에 실제하지 않는 DOM이라고 생각하면 된다.
💡 JSX란? 자바스크립트 확장 문법으로 XML과 유사하며 높은 가독성으로 리액트에서 많이 사용된다.
'use strict';
function formatName(user) {
return user.firstName + ' ' + user.lastName;
};
const user = {
firstName: 'Ji Yeon',
lastName: 'Park'
};
const element = /*#___PURE___*/ React.createElement(
'h1',
null,
'Hello, ',
formatName(user),
'!'
)
function formatName(user) {
return user.firstName + ' ' + user.lastName;
};
const user = {
firstName: 'Ji Yeon',
lastName: 'Park'
};
const element = <h1>Hello, {formatName(user)}!</h1>
두가지 예를 보면 JSX 코드의 뛰어난 가독성을 한 눈에 알아볼 수 있다.
또한 JSX는 바벨이 코드를 변환하는 과정에서 에러 부분을 감지하고 알려주기 때문에 에러 관리하기에도 더 편리하다.