JuneBee 2023. 2. 1. 22:35
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
๋ฐ˜์‘ํ˜•