let's get IT with DAVINA ๐Ÿ’ป

What is React? ๋ณธ๋ฌธ

DEV_IN/React

What is React?

๋‹ค๋นˆ์น˜์ฝ”๋“œ๐Ÿ’Ž 2023. 2. 21. 23:39
React๋กœ ๋‘๋ฒˆ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ ์™œ React๋ฅผ ์ผ๋Š”๊ฐ€์™€ ์–ด๋–ค ์žฅ์ ์ด ์žˆ๋Š”์ง€ ์Šค์Šค๋กœ ์งˆ๋ฌธ์— ์ œ๋Œ€๋กœ ๋‹ต๋„ ๋ชปํ•˜๋Š” ๋‚ด ์ž์‹ ์ด ํ•œ์‹ฌํ•ด์„œ ๋งˆ์Œ ๋‹ค์žก๊ณ  ์ •๋ฆฌ๋ฅผ ๋„์ ์—ฌ๋ด…๋‹ˆ๋‹ค๋นˆ..๐Ÿ˜ฅ
ํ•ญ์ƒ ์ด๊ฑด "์™œ" ์ƒ๊ฒผ๊ณ , "์™œ" ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์“ฐ๋Š”์ง€ ์ •๋„๋Š” ์•Œ๊ณ  ์“ฐ์ž ๋‹ค๋นˆ์•„ใ…ใ…ใ… plz

What is React?

  • React๋Š” ํ”„๋ก ํŠธ์•ค๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ, ํ”„๋ก ํŠธ์•ค๋“œ ๊ฐœ๋ฐœ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” JavaScript ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ๊ธฐ์ˆ ์  ๋ถ„๋ฅ˜์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฅ˜ํ•˜์ง€ ์•Š๊ณ , ๊ธฐ๋Šฅ๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธธ ๊ถŒ์žฅ

๋ฆฌ์•กํŠธ SPA๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํˆด ์ฒด์ธ

npx create-react-app@latest ํด๋”์ด๋ฆ„

React์˜ 3๊ฐ€์ง€ ํŠน์ง•

  • ์„ ์–ธํ˜• (Declarative)
    • ๋ฆฌ์•กํŠธ๋Š” ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด HTML/CSS/JS๋กœ ๋‚˜๋ˆ ์„œ ์ ๊ธฐ ๋ณด๋‹ค๋Š”
    • ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ JSX๋ฅผ ํ™œ์šฉํ•œ ์„ ์˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ (Component-Based)
    • ๋ฆฌ์•กํŠธ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด๋‘” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
    • ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ์„œ๋กœ ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ๋Šฅ ์ž์ฒด์— ์ง‘์ค‘ํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์œ ์ง€/๋ณด์ˆ˜ & ์œ ๋‹›ํ…Œ์ŠคํŠธ ๊ฐ„ํŽธ)

  • ๋ฒ”์šฉ์„ฑ (Learn Once, Write Anywhere)
    • ๋ฆฌ์•กํŠธ๋Š” JavaScript ํ”„๋กœ์ ํŠธ ์–ด๋””์—๋“  ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Facebook(→์ตœ๊ทผ์—” Meta)์—์„œ ๊ด€๋ฆฌ๋˜์–ด ์•ˆ์ •์ ์ด๊ณ , ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๋ฉฐ, React Native๋กœ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Component-Based ์‹ฌํ™” ๊ณต๋ถ€

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€?

  • ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ ๋ฌถ์Œ
  • UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•„์ˆ˜ ์š”์†Œ
  • React์˜ ์‹ฌ์žฅ

๊ฐ์ž ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๋ฉฐ, UI์˜ ํ•œ ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•˜๊ธฐ๋„ ํ•˜๋Š” ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค๊ณ  ์กฐํ•ฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“  ๋ฆฌ์•กํŠธ๋Š” ์ตœ์†Œ ํ•œ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ทผ์›(root)์ด ๋˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค๋ฅธ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๊ณ„์ธต์  ๊ตฌ์กฐ(hierarchy)๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ํ˜•์ƒํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์— ๋ฐฐ์› ๋˜ HTML,CSS,JS๋ฅผ ์ด์šฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์—ˆ์„ ๋•, ํ•˜๋‚˜์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด HTML์„ ์ˆ˜์ •ํ•˜์—ฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๊ณ , CSS๋ฅผ ํ†ตํ•ด ์Šคํƒ€์ผ ์†์„ฑ์„ ์ˆ˜์ •ํ•˜๊ณ , ๋ณ€๊ฒฝ๋œ ๊ตฌ์กฐ์™€ ์Šคํƒ€์ผ์— ๋งž์ถฐ JS๊ฐ€ DOM์„ ์กฐ์ž‘ํ•˜๊ฒŒ๋” ์ˆ˜์ •ํ•ด์คฌ์–ด์•ผ ํ•œ๋‹ค.

โ–ถ BUT React๋ฅผ ์ด์šฉํ•˜๋ฉด? 

์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ์ž์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‹ˆ ์›ํ•˜๋Š” ์ˆ˜์ •์‚ฌํ•ญ์— ๋งž์ถฐ ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ ์œ„์น˜๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
๐Ÿ’ก REACT์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋Š”? → ์—˜๋ฆฌ๋จผํŠธ

Component๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

1. ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฆ„ ์ง“๊ธฐ (์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘)

2. ์ถ•์•ฝ์„ ์›ํ•˜๋Š” HTML ๋„ฃ๊ณ 

(return () ์†Œ๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ๊ธฐ, ๊ทธ ์•ˆ์— ์žˆ๋Š” ๊ฑด ํƒœ๊ทธ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์•ผํ•จ)

(์˜๋ฏธ์—†๋Š” <div>์“ฐ๊ธฐ ์‹ซ์œผ๋ฉด fragment์ด์šฉ ๊ฐ€๋Šฅ <> </>)

3. ์›ํ•˜๋Š” ๊ณณ์—์„œ <ํ•จ์ˆ˜๋ช… />

<Modal /> //3. ์›ํ•˜๋Š” ๊ณณ์— <ํ•จ์ˆ˜๋ช…/>๋„ฃ๊ธฐ

function Modal(){ //1. ํ•จ์ˆ˜๋งŒ๋“ค๊ณ  ์ด๋ฆ„์ง“๊ธฐ
	return ( //2. ์ถ•์•ฝ์„ ์›ํ•˜๋Š” html์„ ๋„ฃ๊ธฐ
		<div className="modal">
			<h2>์ œ๋ชฉ</h2>
			<p>๋‚ ์งœ</p>
			<p>์ƒ์„ธ๋‚ด์šฉ</p>
		</div>
	)
}
โ“ ์–ด๋–ค ๊ฑธ component๋กœ ๋งŒ๋“ค๊นŒ?
- ๋ฐ˜๋ณต ์ถœํ˜„ํ•˜๋Š” HTML ๋ฉ์–ด๋ฆฌ๋“ค
- ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” HTML UI๋“ค
- ๋‹ค๋ฅธ ํŽ˜์ด์ง€ ๋งŒ๋“ค ๋•Œ๋„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ฆ

๐Ÿšซ Component๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๋งŒ๋“ค ๋•Œ์˜ ๋‹จ์ 
- state ์“ธ ๋•Œ ๋ณต์žกํ•ด์ง
- ๋”ฐ๋ผ์„œ ์ƒ์œ„ component์—์„œ ๋งŒ๋“  state์“ฐ๋ ค๋ฉด props๋กœ ๋ฐ›์•„์™€์•ผํ•จ

 

Comments