React Native๋?
๐ก React-Native๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก iOS์ Android๋ฅผ ๋์์ ๊ฐ๋ฐํ๊ณ ๋น๋ํ ์ ์๋ ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ ๋๋ค.
RN Pros & Cons
์ฅ์
- ๋์ ์ฌ์ฌ์ฉ์ฑ : ์์ฑ๋ ์ฝ๋ ๋๋ถ๋ถ ํ๋ซํผ ๊ฐ์ ๊ณต์ ๊ฐ ๊ฐ๋ฅํด์ iOS, Android๋ฅผ ๋์์ ๊ฐ๋ฐ ํ ์ ์๋ค.
- Fast Refresh : ๋ณ๊ฒฝ๋ ์ฝ๋๋ฅผ ์ ์ฅํ๊ธฐ๋ง ํด๋ ์๋์ผ๋ก ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ํ๋ฉด์ ์ ์ฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ผ๋ก ์์ > ์ปดํ์ผ > ์๋ก๊ณ ์นจ ๋ฑ์ ์์ ์ ์๋ตํ๊ณ ๋ถํ์ํ ์์ ์๊ฐ์ ์ค์ผ ์ ์๋ค. - ์ฑ๋ฅ ์ ํ ๋ฌธ์ ์ ํด๊ฒฐ : ์์ฑ๋ ์ฝ๋์ ๋ฐ๋ผ ๊ฐ ํ๋ซํผ์ ์๋ง์ ๋ค์ดํฐ๋ธ ์๋ฆฌ๋จผํธ๋ก ์ ํ๋๊ธฐ ๋๋ฌธ์ ํฐ ์ฑ๋ฅ ์ ํ ์์ด ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
- ์ฌ์ด ์ ๊ทผ์ฑ : ๋ชจ๋ฐ์ผ์ ๋ํ ๊ฐ๋ฐ ์ง์์ด ์์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ์๊ณ ์์ผ๋ฉด ์ฝ๊ฒ ์์ํ ์ ์๋ค.
๋จ์
- ์ ๊ธฐ๋ฅ ์ ๋ฐ์ดํธ ์ด์ : RN(React Native)์ด ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ ํ๋๋ค๋ ์ฅ์ ์ ์์ผ๋ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์์ด ์๋ก์ด ๊ธฐ๋ฅ์ด ๋์ฌ ์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ ์ด๋ฅผ ์ง์ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ๋๋ค๋ ๋จ์ ์ด ์๋ค.
- ์ ์ง๋ณด์ ๋ฐ ๋๋ฒ๊น ํ๊ณ : ๋๋ฒ๊น ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฌ์ด React์ ๋ฌ๋ฆฌ React Native๋ ๋๋ฒ๊น ์ด ์ด๋ ค์ ๊ฐ๋ฐ ๋จ๊ณ์์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ๋ฌธ์ ์ ์์ธ์ ์ฐพ๊ธฐ๊น์ง ๋ง์ ์๊ฐ์ด ์์๋๋ค.
- ์ฆ์ ์ ๋ฐ์ดํธ : ํ๋๋ฌ ์ฌ์ด์๋ ์ ๋ฐ์ดํธ๊ฐ ์์ฃผ ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ณ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋๋ฐ๋ ๊ธ์ ์ ์ด์ง๋ง ๋๋ฌด ์ฆ์ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฐ์ ๋ฐฉํด๊ฐ ๋๊ธฐ๋ํ๋ค.
- ๋ฆฌ์กํธ ๋ณํ์ ์ํฅ: ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ํน์ฑ์ ๋ฆฌ์กํธ์์ ๋ฉ์๋, ๋ผ์ดํ ์ฌ์ดํด๋ฑ์ ๋ณํ๊ฐ ์ผ์ด๋๋ฉด ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์์๋ ๋ง์ ์์ ์ด ํ์ํ ์ ์๋ค.
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ๋์๋ฐฉ์
Bridge
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๊ฐ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํ๋๋ ๊ณผ์ ์๋ Bridge๊ฐ ํ์ํ๋ค.
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ด์ฉํด์ ๋ค์ดํฐ๋ธ ๊ณ์ธต๊ณผ ํต์ ํ ์ ์๋๋ก ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์
๋ธ๋ฆฟ์ง(bridge)๊ฐ ์๋ค.
- JavaScript Thread : ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋๊ฐ ์คํ๋๋ ์ฅ์ *(๋ณดํต ๋ฆฌ์กํธ ์ฝ๋๋ก ๊ตฌ์ฑ๋์ด์๋ค.)
- Native : ๋ค์ดํฐ๋ธ ๊ณ์ธต ์ฝ๋
- Main Thread : UI๋ฅผ ๋ด๋นํ๋ ๋ฉ์ธ ์ค๋ ๋
- Shadow Thread : ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ๋ ์ด์์์ ๊ณ์ฐํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- Native Module : ๊ฐ ๋ชจ๋์ ์์ฒด ์ค๋ ๋
๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Bridge๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ ๋์์ ์ ๋ณด๋ฅผ ๋ฐ์ ๋ค์ดํฐ๋ธ๋ก ์ ๋ฌํ๊ฒ ๋๋ค. ์ด๋ ๊ฒ RN์ด ๊ธฐ๊ธฐ์ ํต์ ํ๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌ๋ ์ค๋ ๋๋ก ์ฒ๋ฆฌํ๋ฉด์ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์จ๋ค.
Virtual DOM
๐ก Virtual DOM์ด๋? ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฐ์์ DOM์ด๋ค.
Virtual DOM Process
- ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ๋ค.
- ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ DOM์ ๊ทธ๋ฆฐ๋ค.
- ๊ฐ์ DOM๊ณผ ์ค์ DOM์ ์ฐจ์ด๋ฅผ ํ์ ํ๋ค.
- ์ฐจ์ด์ ์ด ์๋ ๋ถ๋ถ๋ง ์ ๋ณํ์ฌ ์ค์ DOM์ ์ ์ฉํ๋ค.
์ค์ DOM์ ํ๋ฉด์ ๋ํ๋๋, ์ฆ ์ฐ๋ฆฌ๊ฐ ๋ณผ ์ ์๋ DOM์ด๊ณ ๊ฐ์ DOM์ ๋น๊ต๋ฅผ ์ํด์๋ง ์กด์ฌํ๊ณ ํ๋ฉด์ ์ค์ ํ์ง ์๋ DOM์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
JSX
๐ก JSX๋? ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฅ ๋ฌธ๋ฒ์ผ๋ก XML๊ณผ ์ ์ฌํ๋ฉฐ ๋์ ๊ฐ๋ ์ฑ์ผ๋ก ๋ฆฌ์กํธ์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
JavaScript vs JSX
- JavaScript
'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),
'!'
)
- JSX
function formatName(user) {
return user.firstName + ' ' + user.lastName;
};
const user = {
firstName: 'Ji Yeon',
lastName: 'Park'
};
const element = <h1>Hello, {formatName(user)}!</h1>
๋๊ฐ์ง ์๋ฅผ ๋ณด๋ฉด JSX ์ฝ๋์ ๋ฐ์ด๋ ๊ฐ๋ ์ฑ์ ํ ๋์ ์์๋ณผ ์ ์๋ค.
๋ํ JSX๋ ๋ฐ๋ฒจ์ด ์ฝ๋๋ฅผ ๋ณํํ๋ ๊ณผ์ ์์ ์๋ฌ ๋ถ๋ถ์ ๊ฐ์งํ๊ณ ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ฌ ๊ด๋ฆฌํ๊ธฐ์๋ ๋ ํธ๋ฆฌํ๋ค.
https://gparkkii.github.io/TIL/react-native/#rn-pros--cons
[TIL-1] React-Native๋ ๋ฌด์์ธ๊ฐ?
All about React Native React Native๋? ๐ก React-Native๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก iOS์ Android๋ฅผ ๋์์ ๊ฐ๋ฐํ๊ณ ๋น๋ํ ์ ์๋ ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ ๋๋ค. RN Pros & Cons ์ฅ์ ๋์ ์ฌ์ฌ์ฉ์ฑ :
gparkkii.github.io
'react-native' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
react-native ์คํ์ผ (0) | 2021.09.07 |
---|---|
react-native ํ๊ฒฝ์ค์ (0) | 2021.09.06 |
๋๊ธ