React Native๋ž€?

    728x90
    ๋ฐ˜์‘ํ˜•

    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

    1. ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•œ๋‹ค.
    2. ๋ณ€ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ€์ƒ DOM์„ ๊ทธ๋ฆฐ๋‹ค.
    3. ๊ฐ€์ƒ DOM๊ณผ ์‹ค์ œ DOM์˜ ์ฐจ์ด๋ฅผ ํŒŒ์•…ํ•œ๋‹ค.
    4. ์ฐจ์ด์ ์ด ์žˆ๋Š” ๋ถ€๋ถ„๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์‹ค์ œ 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

     

    728x90
    ๋ฐ˜์‘ํ˜•

    'react-native' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    react-native ์Šคํƒ€์ผ  (0) 2021.09.07
    react-native ํ™˜๊ฒฝ์„ค์ •  (0) 2021.09.06

    ๋Œ“๊ธ€