3. React

ํ‚ค์›Œ๋“œ

  • React๋ž€?

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

  • React ๋ฆฌ๋ Œ๋”๋ง

  • IoC(Inversion of Control)

  • Library vs Framework

๋ฆฌ์•กํŠธ

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

UI ๋Ÿฐํƒ€์ž„์œผ๋กœ์˜ React

ํ˜ธ์ŠคํŠธ ํŠธ๋ฆฌ

๋ฆฌ์•กํŠธ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•จ

๊ทธ ํŠธ๋ฆฌ๋Š” DOM์ด๋‚˜ ios์™€ ๊ฐ™์ด ์™ธ๋ถ€ ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ์ผ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธ ํŠธ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฆ„

ํ˜ธ์ŠคํŠธ๋Š” ์ž์ฒด์ ์ธ ๋ช…๋ นํ˜• API๊ฐ€ ์žˆ์Œ

React๋Š” ๋ณต์žกํ•œ ์ผ์„ ํ•˜๋Š” ํ˜ธ์ŠคํŠธ ํŠธ๋ฆฌ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๊ฒŒ ์กฐ์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์œ ์šฉ

ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด

  • ํ˜ธ์ŠคํŠธ ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ(ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด)๋กœ ๊ตฌ์„ฑ๋จ

  • ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋Š” ๊ณ ์œ ํ•œ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ , ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•˜๋Š” API๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  React๊ฐ€ ์ฒ˜๋ฆฌํ•จ

ex)

  • DOM ํ™˜๊ฒฝ์˜ DOM ๋…ธ๋“œ document.createElement('div')

  • domNode.className ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์ง

  • appendChild, removeChild, setAttribute ๊ฐ™์€ DOM API๊ฐ€ ์ œ๊ณต๋จ

๋ Œ๋”๋Ÿฌ

React๊ฐ€ ํŠน์ • ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ , ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌ

ex) React DOM, React Native

๋ Œ๋”๋Ÿฌ์˜ ๋‘๊ฐ€์ง€ ๋ชจ๋“œ

  1. ๋ณ€๊ฒฝ ๋ชจ๋“œ : ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์†์„ฑ์„ ์„ค์ •ํ•œ ๋‹ค์Œ, ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Œ (DOM ์ž‘๋™ ๋ฐฉ์‹)

  2. ์˜์† ๋ชจ๋“œ : appendChild() ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  ๋ถ€๋ชจํŠธ๋ฆฌ๋ฅผ ๋ณต์ œํ•œ ๋’ค ํ•ญ์ƒ ์ตœ์ƒ์œ„ ํ•˜์œ„๋ฅผ ๋Œ€์ฒด

์—˜๋ฆฌ๋จผํŠธ

  • ๋ฆฌ์•กํŠธ์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ตฌ์„ฑ ์š”์†Œ (DOM Node ๊ฐ™์€ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด)

  • ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋Š” ํ™”๋ฉด์— ๋ฌด์—‡์„ ๊ทธ๋ฆฌ๊ณ  ์‹ถ์€์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด

  • ์—˜๋ฆฌ๋จผํŠธ๋Š” ์˜์†์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š์Œ(๋งค๋ฒˆ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง€๊ณ  ๋ฒ„๋ ค์ง)

  • ์—˜๋ฆฌ๋จผํŠธ๋Š” ๋ถˆ๋ณ€ํ•จ(์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑ)

์ง„์ž…์ 

ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด ๋‚ด๋ถ€์— ํŠน์ • React ์—˜๋ฆฌ๋จผํŠธ ํŠธ๋ฆฌ๋ฅผ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” API

ReactDOM.render(reactElement, domContainer)๋Š” domContainer์˜ ํ˜ธ์ŠคํŠธ ํŠธ๋ฆฌ๋ฅผ reactElement๋กœ ๋ฐ”๊ฟ”์คŒ

ReactDom.render๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด๋ถ€์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์†์„ฑ์„ ์„ค์ •ํ•จ

 let domNode = document.createElement(reactElement.type);
  domNode.className = reactElement.props.className;

์ปดํฌ๋„ŒํŠธ

  • UI์˜ ๋นŒ๋”ฉ ๋ธ”๋Ÿญ

  • UI๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ , ๋ชจ๋“  UI๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋จ

  • ๋งˆํฌ์—…์„ ๋ฆฌํ„ดํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜

  • ํ•จ์ˆ˜๋ช…์€ ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘

๋ฆฌ๋ Œ๋”๋ง

  • ๋ Œ๋”๋ง : ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •

  • DOM : HTML์„ ํ†ตํ•ด ์›น์‚ฌ์ดํŠธ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” API๋ฅผ ํ†ตํ•ด DOM์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ

  • ๋ฆฌ์•กํŠธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณ€๊ฒฝ์ƒํƒœ๋ฅผ VDOM(virtual dom)์— ๋จผ์ € ์ ์šฉ

  • VDOM์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด ๋ฆฌ์•กํŠธ๋Š” ์ด์ „ VDOM์˜ ์Šค๋ƒ…์ƒท๊ณผ ๋น„๊ตํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ DOM๋งŒ ์—…๋ฐ์ดํŠธ

  • ์‹ค์ œ DOM์—…๋ฐ์ดํŠธ๋Š” ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ์ ์€ ๋ฒ”์œ„๋งŒ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํšจ์œจ์ 

์žฌ์กฐ์ •

  • DOM์„ ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

  • ๋ฆฌ์•กํŠธ๋Š” ํŠธ๋ฆฌ์˜ ๊ฐ™์€ ์œ„์น˜์— ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ ํƒ€์ž…์ด ์ด์ „ ๋ Œ๋”๋ง๊ณผ ๋‹ค์Œ ๋ Œ๋”๋ง ์‚ฌ์ด์— ์ผ์น˜ํ•˜๋ฉด, ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉ(์†์„ฑ๋งŒ ๋ณ€๊ฒฝ)

๋ฆฌ์•กํŠธ๋Š” ์–ธ์ œ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š”๊ฐ€

  • ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ

  • ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ renderํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , props ๋ณ€๊ฒฝ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ฆฌ๋ Œ๋”๋ง ๋จ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ œ๋Œ€๋กœ ๊ตฌ์กฐํ™”๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ƒ์œ„๋…ธ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋ชจ๋“  ์ž์‹๋“ค์˜ renderํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

์ œ์–ด์˜ ์—ญ์ „(IoC, Inversion of Control)

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๊ฐ์ฒด๋‚˜ ๋ฉ”์„œ๋“œ์˜ ์ œ์–ด๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์— ์œ„์ž„ํ•˜๋Š” ์„ค๊ณ„ ์›์น™

  • ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ œ์–ด์˜ ์—ญ์ „ ๊ฐœ๋…์ด ์ ์šฉ๋œ ๋Œ€ํ‘œ ๊ธฐ์ˆ 

Library vs Framework

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์™€ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ๊ฒƒ

  • IoC๋Š” ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ผ๋ถ€๊ฐ€ ๋˜์–ด ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์ œ์–ด๋˜๋Š” ๊ฒƒ

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ œ์–ด ์ฑ…์ž„์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์œ„์ž„๋˜๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ

๋ฆฌ์•กํŠธ์—์„œ ์ œ์–ด์˜ ์—ญ์ „

  • ๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ํ˜ธ์ถœ ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง

  • ์šฐ๋ฆฌ๊ฐ€ ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋ฆฌ์•กํŠธ๋ฅผ ํ†ตํ•ด์„œ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ๊ฐ€ ์ฃผ๋Š” ์žฌ์กฐ์ •๋“ฑ์˜ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Œ

Last updated