• 01. 1๊ฐ• ๋‚ด์šฉ ์ •๋ฆฌ

    2023. 2. 1.

    by. JuneBee

    728x90
    ๋ฐ˜์‘ํ˜•

    ๋‚ ์งœ : 2023-02-01

    Chapter 1 ์ •๋ฆฌ

    React Native์˜ ์žฅ์ 

    • Cross platform
    • Resources

    Component ๋ž€ ? 

    block ์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ์‰ฝ๋‹ค. Component๋Š” stateful์™€ stateless ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.

    Stateful

    ์ƒํƒœ ์œ ์ง€

    class HelloWorld extends React.Component {
      constructor() {
        super()
        this.state = { name : 'Chris'}
      }
      render() {
        return <componentName />
      }
    }

    Stateless

    ์ƒ๋ช…์ฃผ๊ธฐ method์— ์—ฐ๊ฒฐ X -> state ์œ ์ง€ X

    ๋”ฐ๋ผ์„œ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์†์„ฑ (props)๋กœ ๋ฐ›์•„์„œ ๋””์Šคํ”Œ๋ ˆ์ด ํ•œ๋‹ค

    -> ์ฃผ๋กœ ์ด ๋ฐฉ์‹์œผ๋กœ ์›นํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ–ˆ์—ˆ๋‹ค.

    const HelloWorld = () => {
      <Component />
    }

    Example

    import React from 'react'
    import { View, Text, StyleSheet } from 'react-native'
    
    class HelloWorld extends React.Component {
      constructor() {                      // ์ƒ์„ฑ์ž์—์„œ name ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ state ๋กœ ์„ค์ •
        this.state = {
          name: 'React Native in Action'
        }
      }
      componentDidMount() {               // ๋ผ์ดํ”„์‚ฌ์ดํด์—์„œ ์ตœ์ข…์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ
        console.log('mounted');
      }
      render () {
        return (
         <View style={styles.container}>
           <Text>{this.state.name}</Text>
         </View>
        )
      }
    }
    
    const styles = StyleSheet.create({
      container: {
      	marginTop: 100,
        flex: 1
      }
    })

    ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ๋กœ๋”ฉ๋  ๋•Œ, ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด name  ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ(state)๋กœ ์ง€์ •

    ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” props ๋‚˜ state๋กœ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

    this.setState({
      name : 'Sheep'
    })

    ๋ฆฌ์•กํŠธ ์ƒ๋ช…์ฃผ๊ธฐ

    ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด์„œ ๋ฉ”์„œ๋“œ๋“ค์ด ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ์™€ ์—ฐ๊ฒฐ. constructor, componentDidMount, render ๋“ฑ์ด ์žˆ๋Š”๋ฐ ๋” ์ž์„ธํ•œ๊ฑด 2์žฅ์—์„œ ๋‹ค๋ฃฌ๋‹ค๊ณ  ํ•œ๋‹ค.

    ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ

    • ๋™๊ธฐํ™”
    • ์ปดํฌ๋„ŒํŠธ state ๊ด€๋ฆฌ ์ง€์›
    • ํ•„์š”์— ๋”ฐ๋ผ ๋‹จ๊ณ„๋ณ„๋กœ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์›
      -> render ๋˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๊ฐ™์€ ์ƒํƒœ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ ๊ฐ™์Œ
    • render ๋Š” ๊ผญ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ์„ ํƒ์ ์œผ๋กœ ํ•„์š”ํ•จ

    ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์˜ ์ž‘๋™ ๋ฐฉ์‹ ์ดํ•ด

    JSX

    JSX๋Š” XML์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ตฌ๋ฌธ ํ™•์žฅ์ด๋‹ค. ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ JSX ๊ฐ€ ์—†์–ด๋„ ๋˜์ง€๋งŒ, JSX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์•กํŠธ์™€ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœ์ ํŠธ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ›จ์”ฌ ๋” ์‰ฌ์›Œ์ง„๋‹ค๊ณ  ํ•œ๋‹ค.

    jsx ์†Œ๊ฐœ ํŽ˜์ด์ง€ : https://reactjs.org/docs/introducing-jsx.html

    ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ

    ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๊ธฐ์™€ ํ†ต์‹ ํ•˜๋Š” ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋Šฅ์€ ๋ถ„๋ฆฌ๋œ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

    ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์€ ๋„ค์ดํ‹ฐ๋ธŒ ํ”Œ๋žซํผ๊ณผ ์ธํ„ฐ๋ ‰์…˜์—์„œ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค์™€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌ๋™์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ณด์ด๋Š” ๊ฒƒ์ž„!!!

     

    ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์Šค๋ ˆ๋“œ๋Š” API ํ˜ธ์ถœ, ํ„ฐ์น˜ ์ด๋ฒคํŠธ, ์ธํ„ฐ๋ ‰์…˜์„ ์ฒ˜๋ฆฌ

    ๋„ค์ดํ‹ฐ๋ธŒ ๋‚ด๋ถ€์˜ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ•  ๋•Œ์—๋Š” ์ผ๊ด„์ฒ˜๋ฆฌ ํ›„ ๋„ค์ดํ‹ฐ๋ธŒ์— ์ „๋‹ฌ

    ๋ฆฌ์•กํŠธ

    • ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋Š” ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค ๐Ÿงธ
    • ๋ฆฌ์•กํŠธ๋Š” ๋ณธ๋ž˜ ์›น ์•ฑ ์ƒ์„ฑ + ์›น ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ํˆด์ด์—ˆ์ง€๋งŒ ๋žœ๋”๋ง ์†๋„์™€ ์œ ์ง€, UI ๋กœ ์ธํ•ด ๋งŽ์€ ์ฃผ๋ชฉ์„ ๋ฐ›์Œ
    • ๋ฆฌ์•กํŠธ๋Š” ๊ฐ€์ƒ DOM ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋˜ ๊ธฐ์กด DOM์„ ๋Œ€์ฒด
      ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, ๊ธฐ์กด์—” DOM์—์„œ ์‚๋น„๋น„๋น• ์ฒ˜๋ฆฌ -> ๋Š๋ฆผ ์ด๋žฌ๋Š”๋ฐ
      ๋ฆฌ์•กํŠธ๋Š” ๊ฐ€์ƒ DOM์—์„œ ์€ผ์€ผ์€ผ์€ผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ณธ๋งŒ ์‹ค์ œ DOM์—๋‹ค๊ฐ€ ๋น„๊ตํ•ด์„œ ๋‹ค๋ฅธ์ ์„ ๋ฎ์–ด ์”Œ์šฐ๊ธฐ ๋•Œ๋ฌธ์— DOM ์—ฐ์‚ฐ์ด ์ค„์–ด๋“ฆ

    ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„

    ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์—„์ฒญ ๊ฐ•์กฐํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ๋˜๋ฉด ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•ด์ง

    ๋””ํ•‘ (์ฝ”๋“œ ๋ฐฐ๊ต)

    ๋ฆฌ์•กํŠธ๋Š” ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•˜๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ˜์˜ํ•จ (UI ์™€ ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ์Šค๋ ˆ๋“œ์— ์ตœ์†Œํ•œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋–„ ์‚ฌ์šฉ๋จ)

    ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์˜ ๊ฐ•์ 

    ์ฑ…์—์„œ ๊ธธ๊ฒŒ ์„œ์ˆ ํ•˜๋Š”๋ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝํ•˜๋ฉด,

    • ์˜คํ”ˆ์†Œ์Šค
    • crossplatform
    • ์„ฑ๋Šฅ
    • ๋ฐ์ดํ„ฐ ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„ (MVC framework์™€๋Š” ๋‹ค๋ฅด๊ฒŒ React native ๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ž„)
      ์ด๊ฒŒ ๋ฌด์Šจ ์†Œ๋ฆฐ๊ฐ€ ํ–ˆ๋”๋‹ˆ Data -> Home ->  Parent -> Children ์ด ๊ตฌ์กฐ ์–˜๊ธฐ์˜€๋‹ค
      ์ด๊ฒƒ๋•Œ๋ฌธ์— ํŒ์—…๊ฐ™์€๊ฑฐ ๋งŒ๋“ค ๋•Œ ์—ญ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๋Š”๊ฑธ ํ•œ์ฐธ ์–ด๋ ค์›Œํ–ˆ์—ˆ๋Š”๋ฐ ์ด๊ฒŒ ์žฅ์ ์ด์—ˆ๋‹ค๋‹ˆ..๋’ค์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค๋‹ˆ ์ข€ ์ดํ•ดํ•ด๋ณด๊ณ ์‹ถ๋‹ค
    • ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง(transpilation)
      ๋ฐ”๋ฒจ..ํ•ญ์ƒ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ• ๋•Œ ์˜ต์…˜์— babel ์ด๋Ÿฐ๊ฑธ ๋ดค์—ˆ๋Š”๋ฐ ์ด๊ฒŒ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง๊ณผ ๊ด€๋ จ๋œ๊ฑฐ๋ผ ํ•œ๋‹ค
      ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง์€ transpiler๊ฐ€ ํŠน์ • ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋œปํ•˜๋Š”๋ฐ React Native๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง ๊ณผ์ •์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋œ Babel (๋ฐ”๋ฒจ)์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ”๋ฒจ์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋ง ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ๋กœ ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์–ธ์–ด ๊ธฐ๋Šฅ๊นŒ์ง€ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•ด์ค€๋‹ค๊ณ  ํ•จ

    ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์˜ ์•ฝ์ 

    • ์ˆœ์ˆ˜ํ•œ iOS๋‚˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹์ธ  ์ฝ”๋ฅด๋„๋ฐ”์— ๋น„ํ•ด ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ์Œ
    • ๋ฆฌ์•กํŠธ๋ฅผ ๋ชจ๋ฅด๋ฉด ์™„์ „ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์›Œ์•ผํ•จ

    ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๊ธฐ

    View, Text , Image ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ ์ปดํฌ๋„ŒํŠธ ์ œ๊ณต. ๋ธ”๋ก ์กฐ๋ฆฝ์ฒ˜๋Ÿผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

    ES5๋กœ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋–„์—๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฏธ์นœ๋“ฏ์ด ๋‚ฌ์—ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋„ ์ง€์–‘ํ•˜๋ผ๊ณ  ๋˜์–ด์žˆ๋‹ค.

     

    ์‹œ์ž‘ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ ์ฑ•ํ„ฐ๋Š” ์ฒซ ํ™˜๊ฒฝ ์„ธํŒ…์— ๋Œ€ํ•œ ๋‚ด์šฉ๋“ค์€ ์—†์–ด์„œ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋‚˜ ๊ณต์‹ ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ณ  ์ฐธ๊ณ ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„์„œ ๋”ฐ๋กœ ๊ธฐ๋กํ•˜๊ฒ ๋‹ค.

     

    ๋ฐฐ์šด์  ๐Ÿงธ

    SSAFY์—์„œ ํ”„๋กœ์ ํŠธ๋งŒ ์ง„ํ–‰ํ•  ๋•Œ์—๋Š” ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค๊ธฐ ๊ธ‰๊ธ‰ํ•ด์„œ ์ด๋ก ๋ณด๋‹ค ์ง์ ‘ ๋ถ€๋”ช์ณ์„œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋ƒˆ๋‹ค. ์›น์ด๋‹ค ๋ณด๋‹ˆ๊นŒ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋„ ๋ฐ”๋กœ ๋ณด์ด๊ณ  ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๊ฐ€ ์ •ํ™•ํžˆ ๋ญ”์ง€๋Š” ๋ชฐ๋ผ๋„ ๋Œ€์ถฉ ์ด๋Ÿฐ๊ฑธ ํ•œ๋‹ค,, ์ •๋„๋งŒ ์•Œ๊ณ  ์žˆ์–ด๋„ ๋™์ž‘ํ–ˆ์ง€๋งŒ ํ™•์‹คํžˆ ์ด๋Ÿฐ ๋ฐฐ๊ฒฝ์ง€์‹์„ ๊ฐ€์ง€๊ณ  ๊ณต๋ถ€ํ–ˆ๋‹ค๋ฉด ๋” ์ข‹์•˜์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ญ”๊ฐ€ ์ด๋ก ์„ ๋’ค๋Šฆ๊ฒŒ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ ๋‚˜๋ฆ„ ์ž˜ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ํ”„๋ก ํŠธ๋ถ„์•ผ๋„ ๋‚ด๊ฐ€ ๊ทธ๋™์•ˆ ์–ผ๋งˆ๋‚˜ ์ˆ˜๋™์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์—ˆ๋Š”์ง€ ๊นจ๋‹ซ๊ฒŒ ๋˜๋Š”๊ฒƒ ๊ฐ™๋‹ค. 

    728x90
    ๋ฐ˜์‘ํ˜•

    '๐Ÿ““ STUDY > ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์ธ ์•ก์…˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    00. ๋ถ๋Ÿฌ๋‹ ์‹œ์ž‘  (0) 2023.02.01

    ๋Œ“๊ธ€