요즘 잡 포스트 보면 많이 나오는 React Native 에 대해서 개념 정리를 해보려고 한다.
React Native?
리액트 네이티브는 페이스북이 개발한 오픈 소스 모바일 애플리케이션 프레임 워크인데, React 와 크게 다른 점은 리액트는 반응형 웹을 위한 페이스북이 제작한 프레임 워크인 반면에 리액트 네이티브는 더 나아가 안드로이드, IOS, Web, UWP용 앱을 개발하기 위해 사용되며, 개발자들이 네이티브 플랫폼 기능과 더불어 리액트를 사용할 수 있게 만들어 진 것
- 크로스 플랫폼 개발을 위해서 스타트업 들이 자주 사용하는 언어 (안드로이드와 IOS 를 모두 자바스크립트의 언어형식으로 모두 개발 할 수 있다는 가장 큰 장점?)
장점
- 크로스 플랫폼 : 앞서 말했듯이 안드로이드와 IOS 를 모두 다 개발할 수 있다는 장점이 있다.
- 오픈소스 플랫폼 : 오픈 소스이기 때문에 모든 사람이 네이티브 커뮤니티에 쉽고 빠르게 접근할 수 있다.
- 소스코드의 공유와 재사용 : 컴포넌트 기반의 개발 방식을 사용하기 때문에 코드의 재사용률을 매우 극대화 했다.
- 웹 개발자를 위한 용이성 : React Natie 는 웹 개발인 React 에서 파생된 프레임 워크이므로 기존에 자바스크립트 기반인 React 개발을 했던 분들이 쉽게 앱개발로 넘어갈 수 있습니다.
단점
- API 접근성 : 네이티브 개발에 비해 다양한 API 를 사용하지 못한다.
- 새로운 기능 개발 : 내가 원하는 기능이 오픈소스에 나와있지 않다면, 직접 개발을 해야한다는 단점
- 라이브러리 가용성 : 라이브러리에 대한 지원이 적다.
- 성능 저하 : 방식 자체가 자바스크립트의 스레드와 네이티브의 스레드를 연결시켜 작동하는 하이브리드 형식이므로 기존의 네이티브 개발 방식 보다 성능이 떨어질 수 있다.
어떻게 구현되는데 ?
: React Native 코드를 작성하면 컴파일 하는 과정에서 Native app (즉, 안드로이드나 iOS) 에 알맞게 컴파일을 해주는 것입니다.
그러나, UI요소들은 각 네이티브 앱으로 컴파일 되지만 연산이나 알고리즘을 담당하는 JavaScript 의 같은 경우는 컴파일이 되지 않고 있다. 이러한 것은 React Native가 자체적으로 호스팅하는 특별한 스레드에서 자바스크립트가 실행된다.
이러한 것을 Bridge 라고 부르게 된다.
개발 방식 ?
대표적으로 두가지 개발 방식을 채택한다.
- Expo CLI : Expo는 React Native 개발을 개발자가 쉽게 할 수 있도록 도와주는 툴이다. 기본적인 설정이 다 되어있고, Native파일을 숨겨두고 자동으로 관리를 해준다.
- 단점 : Expo에서 제공하는 기능만 사용가능 하고 모듈을 만들어서 사용은 불가하다. Native 파일 제어 불가
- React Native CLI : 어떠한 툴을 사용하지 않고 React Native 만을 이용해서 개발을 하는 것이다. 자신이 원하는 기능이나 모든 요소들을 제어할 수 있는 장점이 있으나, Expo 에 비해 편리하지 않다는 단점이 있다. 기본적인 설정이 되어있지 않음