크로스 플랫폼 앱: 하나의 소스코드로 android, ios에서 똑같이 작동하는 앱을 말한다.
android와 ios는 호환이 되지 않아서 사실상 두개의 앱을 만드는 것과 같은데, 크로스 플랫폼 앱 하나가 있으면 android, ios 운영 체제를 위해 동시에 개발 및 운영할 수 있다는 장점이 있다.
-> 대표적으로 flutter, react native가 있다.
네이티브 앱: 특정 플랫폼(ios, android)에 최적화되어 작성된 애플리케이션으로, 해당 플랫폼의 전용 프로그래밍 언어로 작성된다.
웹앱: 모바일웹과 네이티브앱을 결합한 형태로 속도가 빠르다. 사실상 웹사이트를 보는 것이기 때문에 따로 설치할 필요가 없지만, 카메라등을 사용할 수 없고 브라우저 api만 사용할 수 있으며 터치 앱을 개발하기 번거롭다.
하이브리드 앱: 네이티브앱+웹앱 형식으로 네이티브앱에 웹뷰를 띄워 웹앱을 실행시키는 것이 보편적이다. 웹개발 기술을 사용해 앱을 개발할 수 있지만, 네이티브 개발 지식이 필수적이다.
react native: 자바스크립트 기반 프레임워크로, 자바스크립트 기반 라이브러리, npm을 사용하며 android, ios 앱을 동시에 만들 수 있다. 성능이 가장 높다.
react native는 런타임 중에 js 브릿지를 생성하고, 자바스크립트 코드를 네이티브 코드로 변환해서 컴파일한다. 브릿지를 통해 네이티브 UI에 접근한다.

장점:

react native에서 가장 중요한 건 자바스크립트가 아닌!
Bridge들을 통해서 코드가 운영제체와 통신할 수 있도록 하는 인프라 시설이다.
react native는 shell과 같다.
자바스크립트 코드를 넣고 그 코드는 운영체제와 이야기할 수 있는 것!
자바스크립트 코드를 짜고
-> 이 앱을 컴파일 시키고
-> 이 모든 인프라 시설들은 apk or ipa가 되고
-> app store로 간다!

react native 애플리케이션은 크게 3가지 주요 스레드에서 작동한다.
1. 메인스레드 2. 자바스크립트 스레드 3. 백그라운드 스레드
이들 스레드는 bridge라는 개념을 통해 서로 필요한 정보를 직렬화하여 통신한다.
그 어떤 시뮬레이터나 java, xcode를 설치하지 않고
react native를 테스트할 수 있다.
-> 우리는 javascript만 만들어도 되는 도구
npm install --global expo-cli
