๐ React Native
โ React Native old architecture์ ์ด๋ ํ ๋ฌธ์ ๋๋ฌธ์ new architecture๊ฐ ๋์ค๊ฒ ๋์๋?โ
๊ธฐ์กด์ react native์ old architecture๋ bridge ํต์ ์ ๊ทผ๋ณธ์ ์ธ ํ๊ณ๊ฐ ์์์ต๋๋ค.
javascript์ native ๋ ์ด์ด ๊ฐ์ ๋ชจ๋ ํต์ ์ด bridge๋ผ๋ ์ค๊ฐ ๋งค๊ฐ์ฒด๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ์๋๋ฐ javascript ๋ ์ด์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ bridge๋ก ๋ณด๋ด๊ณ native ๋ ์ด์ด๋ ์ด ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
์ด๋ก ์ธํด์ ๋ถํ์ํ ์ง์ฐ์ด ๋ฐ์ํ๊ณ ๋ฐ์์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
๋ํ, bridge๋ฅผ ํต๊ณผํ ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ JSON ํํ๋ก ์ง๋ ฌํ๋์ด์ผํ๋๋ฐ ๋ณต์กํ javascript ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํ๋๊ณ ์ ์ก๋๊ณ ๋ค์ ํ์ฑํ๋ ๊ณผ์ ์์ ์ฑ๋ฅ์ด ์์ค๋ฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋๋ฌธ์ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ๊ณผ์ ์์ ์ฌ๊ฐํ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค๋ ๋ ๋ฐ ์ฑ๋ฅ ๋ฌธ์ ๋ ์กด์ฌํ๋๋ฐ, bridge๊ฐ ๋จ์ผ ์ค๋ ๋๋ก ๋์ํ์ฌ ๊ณผ๋ถํ ์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ์ฌ ๋ง์ ๋ฐ์ดํฐ๊ฐ bridge๋ฅผ ํต๊ณผํ ๋ ์ง๋ ฌํ ๋๊ธฐ ์ํฉ์ด ๋ฐ์ํ์ต๋๋ค.
๋ํ, UI ๋ ๋๋ง ์ง์ฐ ๋ฌธ์ ๋ ์์๋๋ฐ, ๋น ๋ฅธ ์คํฌ๋กค ์ JavaScript์ Native ๊ฐ ๋น๋๊ธฐ ํต์ ์ผ๋ก ์ธํ ๋น ๊ณต๊ฐ ํ์๊ฐ ๋๋ ๋ฌธ์ ๊ฐ ์์๊ณ , ํนํ ๊ธด ๋ฆฌ์คํธ์์ ๋ง์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ ๋ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํฉ๋๋ค.
bridge์ ๋จ์ผ ์ค๋ ๋๋ก ์ธํด Bridge๋ฅผ ํตํด ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ๋ฉ์ถฐ ์ฑ ๋ฐ์์ฑ์ด ์ ํ๋ฉ๋๋ค. ์ด ์๊ฐ ๋์ UI ์
๋ฐ์ดํธ, ํฐ์น ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ ๋๋ฉ์ด์
์ด ๋ชจ๋ ์ค๋จ๋๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋๋ฌธ์ ์ฑ์ด ์์ ์ ์ผ๋ก 60FPS๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. 60FPS๋ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์
์ ๊ธฐ์ค์ธ๋ฐ, ์ด๋ฅผ ๋ฌ์ฑํ์ง ๋ชปํ๋ฉด ์ฌ์ฉ์๊ฐ ์ฑ์ด ๋๋ฆฌ๋ค๊ณ ๋๋ผ๊ฒ ๋ฉ๋๋ค.
์ด์ ์ํคํ ์ฒ์์๋ ์ด๋ฌํ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ก ์ธํด react 18์์ ์ง์ํ๋ ๋์์ฑ ๊ธฐ๋ฅ๋ค์ ์ ๋๋ก ์ง์ํ ์ ์์ต๋๋ค.
โ ๊ทธ๋์ new architecture๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ ํ์๋?โ
bridge๋ฅผ ์์ ์ ๊ฑฐํ๊ณ , JSI(JavaScript Interface) ๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ธ ํต์ ์ ํด๊ฒฐํ์์ต๋๋ค. JavaScript์ ๋ค์ดํฐ๋ธ ์ฝ๋ ๊ฐ ์ง์ ์ ์ด๊ณ ๋๊ธฐ์ ์ธ ์ํธ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ๊ธฐ์กด์ bridge๋ฅผ ํตํ ์ง๋ ฌํ๋ ๋น๋๊ธฐ ํธ์ถ์ ์์กดํ์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ๋๊ธฐ์ ์ผ๋ก ๊ฐ๋ฅํ ์ด์ ๋ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ค์ด react native๊ฐ ์๋ํ๋ ํ์ฌ ์คํ ์ค์ธ JavaScript ์์ง์ ๋ฑ๋ก๋์ด์ ์ง์ ํธ์ถํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋๋ฌธ์ ๋ธ๋ฆฌ์ง๊ฐ ์์ด์ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
JSI๊ฐ ๋๊ธฐ์ ์ผ๋ก ๋์ํ ์ ์๋ ์ด์ ๋ JavaScript ๋ฐํ์(Hermes, V8)๊ณผ Native ์ฝ๋๊ฐ ๋ชจ๋ ๋์ผํ C++ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์คํ๋์ด ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ๋ฅผ ํตํด ํต์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
HostObject๊ฐ C++ ๋ฉ๋ชจ๋ฆฌ์์ ๊ด๋ฆฌ๋๊ณ JS ๋ฐํ์์ ์ํด ์ง์ ์ฐธ์กฐ๋๊ธฐ ๋๋ฌธ์, ์ง๋ ฌํ๋ ์ญ์ง๋ ฌํ๊ฐ ํ์ ์์ต๋๋ค. JavaScript๊ฐ HostObject์ ๋ฉ์๋๋ฅผ ์ง์ ํธ์ถํ๊ณ , ๋ฐํ๊ฐ์ JS ํ์ (jsi::Value)์ผ๋ก ๋งคํ๋ฉ๋๋ค.
์ด๋ ์น ๋ธ๋ผ์ฐ์ ์์ JavaScript๊ฐ DOM API๋ฅผ ๋๊ธฐ์ ์ผ๋ก ํธ์ถํ๋ ๊ฒ๊ณผ ๋ณธ์ง์ ์ผ๋ก ๋์ผํ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
old architecture์์์ ์ฑ ์์์ ์ฌ์ฉํ์ง๋ ์์ native ๋ชจ๋๋ค์ ๋ชจ๋ ๋ชจ๋ํ์ฌ ์ฑ ์์ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐ ๋ฐฐํฐ๋ฆฌ ์๋ชจ๊ฐ ์ฆ๊ฐํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ TurboModules๋ฅผ ํตํด ๋ค์ดํฐ๋ธ ๋ชจ๋์ด ๋ฑ๋ก๋๊ณ ์ ๊ทผ๋๋ ๋ฐฉ์์ ์ฌ๊ตฌ์ฑํ์ฌ, ์ง์ฐ ๋ก๋ฉ๊ณผ ํจ์จ์ ์ธ ์ด๊ธฐํ๋ฅผ ํ ์ ์๋๋ก ๊ฐ์ ํ์์ต๋๋ค. ๋ฐ๋ผ์ ํ์ ์์๋ง ์ด๊ธฐํ๊ฐ ๊ฐ๋ฅํ์ฌ ์ฌ์ฉํ์ง ์๋ ๋ชจ๋์ ๋ก๋ํ์ง ์์ ์ฑ ๋ก๋ ์๊ฐ์ ์ค์ผ ์ ์์์ต๋๋ค.
old architecture์์ ๋ ์ด์์์ด ๋น๋๊ธฐ์ ์ด์ฌ์ ๋ ๋๋ง๋ ๋ทฐ๋ฅผ ์๋ฒ ๋ํ ๋ ๋ ์ด์์ ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. new architecture์์๋ useLayoutEffect
hook์ ์ฌ์ฉํ์ฌ ๋ ์ด์์ ์
๋ฐ์ดํธ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์ธก์ ํ๊ณ ์ ์ฉํ ์ ์์ด์ ์๊ฐ์ ์ ํ๋ฅผ ํผํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ Fabric ๋ ๋๋ฌ๊ฐ ํด๊ฒฐํด์ฃผ์๋๋ฐ fabric์ ๋ํ ๋์ ๋ ๋๋ง์ ์ง์ํ์ฌ UI ์
๋ฐ์ดํธ๊ฐ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๋ธ๋กํนํ์ง ์๊ณ ์ผ์์ ์ง, ์ฌ๊ฐ, ๋๋ ์ค๋จ๋ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ํด๊ฒฐ ๋๋ถ์ react native ์ฑ์ด ์ด์ ์ฌ๋ฌ ui ์
๋ฐ์ดํธ๋ฅผ ๋์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ํ fabric์ ์ด๋ค UI์
๋ฐ์ดํธ๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ ธ์ผ ํ๊ณ ์ด๋ค ์
๋ฐ์ดํธ๊ฐ ๊ธฐ๋ค๋ ค์ผ ํ๋์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
fabric ์ํคํ
์ฒ์์ ์คํฌ๋กค์ด๋ ํญ ๊ฐ์ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ต์ฐ์ ์์๋ฅผ ๋ถ์ฌํ์ฌ ์ด๋ฌํ ์์
๋ค์ ์ฆ์ ์ฒ๋ฆฌ๋๋ ๋ฐ๋ฉด, API ์์ฒญ ๊ฐ์ ๋ ๊ธด๊ธํ ์์
๋ค์ ํ๋์ฉ ๋ฎ์ ์ฐ์ ์์๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
fabric์ ๋ํ react suspense, react native์์ react ๋์ ๊ธฐ๋ฅ ํ์ฑํ, ์๋ ๋ฐฐ์นญ, useTransition
๊ณผ useDeferredValue
๋ฅผ react 18์ ๋์
๋ ๊ธฐ๋ฅ๋ค์ ํ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก Codegen ๊ธฐ๋ฅ๋ ์ถ๊ฐ๋์๋๋ฐ ์ด๋, ๊ธฐ์กด์ javascript์ ํ์ ๊ณผ ๋ค์ดํฐ๋ธ๊ฐ์ ํ์ ์ด ๋ค๋ฅธ ๋ฌธ์ ๋ก ์ธํด ์์ ์ฑ์ ๋ณด์ฅํ์ง ๋ชปํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. Codegen์ ๋น๋ ์์ ์ JavaScript ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ์ฌ ํ์ ์์ ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ค์ ๋ค์ดํฐ๋ธ ์ฝ๋๊ฐ JavaScript ๋ ์ด์ด์์ ์ ๋ฌ๋ ๋ฐ์ดํฐ์ ๋๊ธฐํ๋ ์ํ๋ก ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- https://reactnative.dev/architecture/overview
- https://www.openxcell.com/blog/react-native-new-architecture/
- https://reactnative.dev/blog/2024/10/23/the-new-architecture-is-here
- https://github.com/anisurrahman072/React-Native-Advanced-Guide/blob/master/New-Architecture/New-Architecture-in-depth.md
- https://medium.com/@harshitkishor2/react-native-new-architecture-77335db7034f
- https://medium.com/@DhruvHarsora/deep-dive-into-react-natives-new-architecture-jsi-turbomodules-fabric-yoga-234bbdf853b4
- https://engineering.rently.com/react-native-fabric-architecture/
- https://www.brilworks.com/blog/react-native-fabric/
- https://blog.logrocket.com/react-native-new-architecture-sync-async-rendering/
โ react native์ animated์ react-native-reanimated์ ์ฐจ์ดโ
React Native๋ Animated API๋ ๊ธฐ๋ณธ์ ์ผ๋ก JavaScript ์ค๋ ๋์์ ์คํ๋์ง๋ง, useNativeDiver: true
์ต์
์ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ์ค๋ ๋์์ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง, ๋ค์ดํฐ๋ธ ๋๋ผ์ด๋ฒ ์ฌ์ฉ ์์๋ ๋ชจ๋ ์์ฑ์ด ์ง์๋์ง๋ ์๋ ๋จ์ ์ด ์์ต๋๋ค. ๋น๋ ์ด์์ ์์ฑ๋ง ์ ๋๋ฉ์ด์
ํ ์ ์์ต๋๋ค.(transform
๊ณผ opacity
๋ ์๋ํ์ง๋ง Flexbox
์ position
์์ฑ์ ์๋ํ์ง ์์.)
๊ทธ์ ๋นํด react native reanimated๋ ๊ธฐ๋ณธ์ ์ผ๋ก UI ์ค๋ ๋์์ ์คํ๋๋ฉฐ, javascript ์ค๋ ๋์ ๋ถํ๋ฅผ ์์ฑํ์ง ์๊ณ ๋ชจ๋ ๋ค์ดํฐ๋ธ ์์ฑ์ ์ ๋๋ฉ์ด์ ์ ์ง์ํฉ๋๋ค. ๋ํ, Animated API ๊ฐ์ ๊ฒฝ์ฐ 60FPS์์ ์ ๋๋ฉ์ด์ ์ ์ํํ๋๋ก ํ๋์ฝ๋ฉ๋์ด ์์ด ๊ทธ ์ด์์ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ ์ด ์ ํ์ ์ด์ง๋ง, reanimated๋ ์ต๋ 120FPS ์ด์์ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
Reanimated๋ React Native์ ๋ฉ์ธ JavaScript ์ค๋ ๋๋ฅผ ์์ ํ ์ฐํํ์ฌ ์ ๋๋ฉ์ด์ ์ ์คํํ ์ ์๊ฒ ํฉ๋๋ค. ์ ๋๋ฉ์ด์ ๋ฌ๋๊ฐ ์์ ํ ๊ฒฉ๋ฆฌ๋์ด ์์ด์, ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง(์ปดํฌ๋ํธ ๋ ๋๋ง, ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ฒ๋ฆฌ ๋ฑ)์ด ์ ๋๋ฉ์ด์ ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก react native reanimated์๋ worklets์ ๊ฐ๋ ์ด ์๋๋ฐ worklets์ UI ์ค๋ ๋์์ ์คํ๋๋ JavaScript ํจ์์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ฆฌ์ง ๋น์ฉ์ ๊ฑฑ์ ํ์ง ์๊ณ javascript๋ก ๋ค์ดํฐ๋ธ ์์ค์ ์ ๋๋ฉ์ด์ ๋ช ๋ น์ ์ ์ํ ์ ์์ต๋๋ค. ๊ธฐ๋ฅ์ ๋งค์ฐ ๊ฐ๋ ฅํ์ง๋ง, ์ถ๋ก ํ๊ธฐ ์ด๋ ค์ธ ์ ์๋๊ฒ ๋จ์ ์ ๋๋ค.
๋ํ, react native reanimated shared value๋ Animated.Values
์ ๋น๊ตํ ์ ์๋๋ฐ ์ด๋ค์ "์ ๋๋ฉ์ด์
๊ฐ๋ฅํ" ๋ฐ์ดํฐ๋ฅผ ์ด๋ฐํ๊ณ , ๋ฐ์์ฑ์ ๊ฐ๋
์ ์ ๊ณตํ๋ฉฐ, ์ ๋๋ฉ์ด์
์ ๊ตฌ๋ํ๋ ์ ์ฌํ ๋ชฉ์ ์ ์ ๊ณตํฉ๋๋ค.
shared values๊ฐ ํ์ํ ์ด์ ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ๋
์ ์ ๊ณตํ๋ ๊ฒ์
๋๋ค. useSharedValue
๋ฅผ ์ฌ์ฉํ์ฌ shared value๋ฅผ ์์ฑํ๋ฉด, ๋ค์ดํฐ๋ธ ์ธก์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ํ ๋นํ๊ณ ๊ฑฐ๊ธฐ์ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
๋ค์ดํฐ๋ธ ์ธก์ ์ ํํ ์์น๋ worklet runtime(UI ์ค๋ ๋์์ ์คํ๋๋ ๋ณ๋์ javascript ๋ฐํ์), JSI C++ Layer(์ค๋ ๋ ๊ฐ ํต์ ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ C++ ๋ ์ด์ด), ์ค์ ๋ค์ดํฐ๋ธ ํ๋ซํผ(iOS/Android์ ๋ค์ดํฐ๋ธ UI ์์คํ )์ผ๋ก Shared Value์ ์ค์ ๋ฐ์ดํฐ๋ Worklet Runtime์ ์ ์ฅ๋๋ฉฐ, JSI C++ ๋ ์ด์ด๋ฅผ ํตํด React Native JS ์ค๋ ๋์ ๋๊ธฐํ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ๋๋ฉ์ด์ ์ด React์ ๋ ๋๋ง ์ฌ์ดํด๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก UI ์ค๋ ๋์์ ๋ถ๋๋ฝ๊ฒ ์คํ๋ ์ ์๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ shared values๋ UI ์ค๋ ๋์์ ์
๋ฐ์ดํธ๋๊ณ ์ฝํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์ UI์ค๋ ๋์์ ์ํ๋๋ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ ๋ชจ๋ ๋๊ธฐ์ ์
๋๋ค. ํ์ง๋ง ์ด๋ฌํ ์ ํ์ผ๋ก JS ์ค๋ ๋์์ ์ํ๋ ์
๋ฐ์ดํธ๋ ๋ชจ๋ ๋น๋๊ธฐ์ ์
๋๋ค. ์
๋ฐ์ดํธ๋ ์ฆ์ ์ด๋ฃจ์ด์ง๋ ๋์ , Reanimated ์ฝ์ด๋ UI ์ค๋ ๋์์ ์ํ๋ ์
๋ฐ์ดํธ๋ฅผ ์ค์ผ์ค๋งํ์ฌ ๋์์ฑ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
์ด๋ฌํ ์ด์ ๋ shared value๋ ๋จ์ํ javascript ๊ฐ์ฒด์ด๋ฏ๋ก ์ผ๋ฐ์ ์ธ React ๋ฆฌ๋ ๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ง ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก Shared Values๊ฐ ์ฑ๋ฅ์ ์ด์ ์ ์ ๊ณตํ๋ ํต์ฌ ์ด์ ๋ก, ์ ๋๋ฉ์ด์
๊ฐ์ด ๋ณ๊ฒฝ๋์ด๋ React ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋์ง ์์ผ๋ฏ๋ก, ์ ๋๋ฉ์ด์
์ด React์ ๋ ๋๋ง ์ฌ์ดํด๊ณผ ๋
๋ฆฝ์ ์ผ๋ก UI ์ค๋ ๋์์ ๋ถ๋๋ฝ๊ฒ ์คํ๋ ์ ์์ต๋๋ค.
โ FlatList๋ ScrollView์ ์ฐจ์ด๋ ๋ฌด์์ด๊ณ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ๋์ง?โ
ScrollView๋ ๋ชจ๋ ์์ ์ปดํฌ๋ํธ๋ฅผ ํ ๋ฒ์ ๋ ๋๋งํ๋ฉฐ, ํ๋ฉด์ ๋ณด์ด์ง ์๋ ์์๋ค๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํฉ๋๋ค. ๋๋ฌธ์ ๋ชจ๋ ์์ดํ ์ ํ ๋ฒ์ ๋ ๋๋งํ๋ฏ๋ก ์ด๊ธฐ ๋ ๋๋ง ์๊ฐ์ด ๊ธธ์ด์ง๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํฉ๋๋ค. ๊ทธ๋์ ScrollView๋ ์๊ณ ๊ณ ์ ๋ ๊ฐ์์ ์์ดํ ์ ํ์ํ๊ฑฐ๋ ์ ์ ์ธ ์ฝํ ์ธ ์ผ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋ฉด์ FlatList๋ ๊ฐ์ ์คํฌ๋กค๋ง์ ์ฌ์ฉํ์ฌ ํ์ฌ ๋ณด์ด๋ ์์ดํ ๋ค๋ง ๋ ๋๋งํ๊ณ , ํ๋ฉด์์ ๋ฒ์ด๋ ์์ดํ ๋ค์ ๋น๊ณต๊ฐ์ผ๋ก ์ฒ๋ฆฌํ์ฌ, ๊ธฐ๋ณธ์ ์ผ๋ก 10๊ฐ ์์ดํ ๋ง ๋ ๋๋งํ๊ณ ์คํฌ๋กคํ ๋๋ง๋ค ํ์ํ ์์ดํ ์ ๋์ ์ผ๋ก ๋ก๋ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ์ ๋๋ค. ์ด๋ฌํ ํน์ฑ ๋๋ฌธ์ FlatList๋ ํ๋ฉด์์ ๋ฒ์ด๋ ์ปดํฌ๋ํธ๋ฅผ ์ธ๋ง์ดํธํ๊ณ ๋ค์ ๋์์ฌ ๋ ์ฌ์์ฑํ๋ฏ๋ก ๋ด๋ถ ์ํ๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋๋์ ๋ฐ์ดํฐ๋ ๋์ ๋ฆฌ์คํธ๋ฅผ ํ์ํ๊ฑฐ๋ ๋ฌดํ ์คํฌ๋กค์ด๋ ์ง์ฐ ๋ก๋ฉ์ด ํ์ํ ๋, ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ค์ํ ๊ธด ๋ฆฌ์คํธ์ธ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด, FlatList๋ณด๋ค FlashList ์ข๋ค๋๋ฐ FlashList๋ FlatList์ ์ด๋ค ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ์ฌ ์ฑ๋ฅ์ด ๋ ์ข์๊ฑด์ง?โ
FlatList๋ ๊ฐ์ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํ์ฌ ๋ณด์ด๋ ์์ดํ ๋ค๋ง ๋ ๋๋งํ๊ณ , ๋ทฐํฌํธ ์ธ์ฐ์ ์์ดํ ๋ค์ ์ธ๋ง์ดํธํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ๊ณ ์ฑ๋ฅ์ ํฅ์ ์ํต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ง์ดํธํ๊ณ ์ธ๋ง์ดํธํ๋ ๊ณผ์ ์์ ๋๋ฐ์ด์ค ๋ฆฌ์์ค๋ฅผ ์๋ชจํ๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ FlashList๋ ๊ฐ์ํ ๋์ Cell Recycling ์ ๋ต์ ์ฌ์ฉํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๊ณ ์ ๋ ์ปดํฌ๋ํธ ์ธ์คํด์ค ํ์ ์ ์งํ๊ณ , ์์ดํ ์ด ํ๋ฉด์์ ๋ฒ์ด๋ ๋ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์๋ก์ด ๋ฐ์ดํฐ๋ก ์ฌ์ฌ์ฉํฉ๋๋ค. ๋ณด์ด์ง ์๋ ์์ดํ ์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํ๋ ๊ฒ์ ๋ ๋ง์ ๊ฐ์ฒด ์์ฑ๊ณผ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ ๋ฐํ๋ฏ๋ก, FlashList๋ ๋ฆฌ์ฌ์ดํด๋ง์ด ์ฑ๋ฅ์ด๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ ์์์ํค์ง ์์ผ๋ฉด์ ๋ฌดํ ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋งํ๋ ์ต์์ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.