React(Intro)

Seokhoยท2021๋…„ 12์›” 13์ผ
0

๐Ÿ“ Why React?

Web Application์˜ ๋ฐœ์ „

๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋ฉฐ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ์ฝ”๋“œ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ Frontend Framework(Library)๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์„ธ ๊ฐ€์ง€๊ฐ€ Angular, Vue, React ์ž…๋‹ˆ๋‹ค.

Frontend Framework(Library)

Angular

2010๋…„ Google์—์„œ ๊ฐœ๋ฐœํ•œ Framework. TypeScript ๊ธฐ๋ฐ˜์œผ๋กœ ๋งค์šฐ ์•ˆ์ •์ ์ด๊ณ  ํƒ„ํƒ„ํ•œ Frontend App ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ Framework๋‹ต๊ฒŒ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๊ฒ๊ณ  ๋ฐฐ์šฐ๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Vue

2014๋…„ Evan You๋ผ๋Š” ๊ฐœ์ธ์ด ๊ฐœ๋ฐœํ•œ Framework. ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•˜๊ณ  ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ƒ๊ฒผ์ง€๋งŒ ์„ฑ์žฅ ์†๋„๊ฐ€ ์ •๋ง ๋น ๋ฆ…๋‹ˆ๋‹ค.

React

Facebook์—์„œ ๊ฐœ๋ฐœ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ๋ฆฌ์•กํŠธ๋Š” ์˜ค๋กœ์ง€ View๋งŒ ๋‹ด๋‹น. ๊ทธ๋งŒํผ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•ดย third-party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ex. React-router, Redux)๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.
ํŽ˜์ด์Šค๋ถ์˜ ์ง€์†์ ์ธ ๊ด€๋ฆฌ์™€ ํ•จ๊ป˜ ์ƒํƒœ๊ณ„๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ, ๊ทธ๋ฆฌ๊ณ  React Native์˜ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊พธ์ค€ํžˆ ์ฆ๊ฐ€ํ•œ๋‹ค.

What is React?

React๋Š” ํŽ˜์ด์Šค๋ถ์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”ย ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋Š”ย ๊ฐ€์ƒ ๋”(Virtual Dom)ย ์„ ํ†ตํ•ด UI๋ฅผ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์ƒ ๋”์€ย ์ด์ „ UI ์ƒํƒœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•ด์„œ, ๋ณ€๊ฒฝ๋  UI์˜ ์ตœ์†Œ ์ง‘ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ  ๋•๋ถ„์— ๋ถˆํ•„์š”ํ•œ UI ์—…๋ฐ์ดํŠธ๋Š” ์ค„๊ณ , ์„ฑ๋Šฅ์€ ์ข‹์•„์ง‘๋‹ˆ๋‹ค.

Component

์ปดํฌ๋„ŒํŠธ์˜ ์ •์˜

์žฌํ™œ์šฉ ๊ฐ€๋Šฅํ•œ UI ๊ตฌ์„ฑ ๋‹จ์œ„

์ปดํฌ๋„ŒํŠธ์˜ ํŠน์ง•

  • ์žฌํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์— ์ข‹๋‹ค.
  • ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ•œ ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์ข‹๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋Š” ๋˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ - ์ž์‹ ์ปดํฌ๋„ŒํŠธ)

Class vs Functional Component

Classํ˜• ์ปดํฌ๋„ŒํŠธ(Class Component)

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” renderย ํ•จ์ˆ˜๊ฐ€ ๊ผญ ์žˆ์–ด์•ผ ํ•˜๊ณ , ๊ทธ ์•ˆ์— ๋ณด์—ฌ ์ฃผ์–ด์•ผ ํ•  JSX๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Functional Component

Hook ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ state๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ  ๊ทธ ํ›„๋ถ€ํ„ฐ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

JSX

JSX ์ •์˜

  • JavaScript Syntax Extension
  • JSX๋ž€ ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • JSX๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ”๋ฒจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • cf) ๋ฐ”๋ฒจ(Babel)

JSX ํŠน์ง•

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„ : { ... javascript... }
  • class -> className
  • Inline Styling : <div style={{color : "red"}}>Hello React</div> -> ์•„์ฃผ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ
  • Self Closing tag : <div></div> vs. <div />
  • ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฐ์‹ธ๋Š” ์ตœ์ƒ์œ„ ์š”์†Œ (cf. React Fragments : <> ... </>)

JSX์˜ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋‚ด๋ถ€ ์š”์†Œ๋“ค์„ ๊ฐ์‹ธ๋Š” ์ตœ์ƒ์œ„ ์š”์†Œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Fragments(<> </>)๋Š” DOM์— ๋ณ„๋„์˜ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์—ฌ๋Ÿฌ ์š”์†Œ(์ž์‹)๋“ค์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ทธ๋ฃนํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์š”์†Œ๋“ค์„ ๊ฐ์‹ธ๋Š” div ํƒœ๊ทธ์˜ ๋ถˆํ•„์š”ํ•œ ์ƒ์„ฑ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ๋ฐฐ์šด์ 

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

profile
๊ฐ™์ด์˜ ๊ฐ€์น˜๋ฅผ ์†Œ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š”, ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ด์„ํ˜ธ ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€