์ ๋ช์ผ ๊ฐ, ๋ฆฌ์กํธ ์ ์ํ๊ธฐ ์ํด ๋ธ๋ก๊ทธ ์์ฑ์ด ๋ฆ์๋๋ฐ ์ค๋์ ์งฌ์ด ๋์ 2์ผ๊ฐ์ ๋ฆฌ์กํธ ๋์ฅ์ ์ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํ๋ค.
๋ง๊ด๋ถ~~ (์ด 2๋ถ๋ก ๋๋ ๋ฆฌ์กํธ ๊ธฐ๋ณธ ์ ๋๋ค~)
๐ก React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ์ ์ธ์ ์ด๊ณ ํจ์จ์ ์ด๋ฉฐ ์ ์ฐํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ. (Framework x)
๊ทธ๋ฆฌ๊ณ js + html / xml ์ธ jsxํ์ผ์ ์ฌ์ฉํด
์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ html์ ์์ฑํ ์ ์์.
๐ก ์๋ฒ๋ฆฌ์ค๋ ๊ฐ์๋จธ์ ์ ์๋ฒ๋ฅผ ์ค์ ํ์ฌ ์์
์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค.
์ข
๋ฅ๋ ํฌ๊ฒ Baas, FaaS ๋ก ๋๋๋๋ฐ ํ๋ฒ ์์๋ณด์
- BaaS (Backend as a Service)
ex) firebase
์ฑ ๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ API๋ก ์ ๊ณตํด ์ค์ผ๋ก, ์๋ฒ ๊ฐ๋ฐ ์์ด ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
ํ์ง๋ง ํด๋ผ์ด์ธํธ ์์ฃผ์ ์ฝ๋๋ง ์งค ์ ์๊ณ , ์ฑ์ ๊ท๋ชจ์ ๋ฐ๋ผ ๊ฐ๊ฒฉ์ด ๋ง์ด ์ปค์ง๋ฉฐ,
๋ณต์กํ ๋ก์ง์ ๊ตฌํํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
- FaaS (Function as a Service)
ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ๊ฐ์ ํจ์๋ก ์ชผ๊ฐ์ ์ปค๋ค๋ ์ปดํจํ
์์์ ์ค๋นํด๋ ํจ์๋ฅผ ๋ฑ๋ก, ๊ทธ ํ ํ์,
์๊ฐ์ ๋ฐ๋ผ ๋น์ฉ์ ๋ด๋ ๋ฐฉ์
์ฅ์ ์ผ๋ก๋ ํ์ํ ๋๋ง๋ค ํธ์ถํ๋ ๋ฐฉ์์ด๋ผ ๋ถํ์ํ ์ง์ถ์ ๋ง์ ์ ์์ผ๋ฉฐ,
์ธํ๋ผ ๊ด๋ฆฌ ๋ฐ ํ์ฅ์ฑ๋ฉด์์ ์ฑ๋ฅ์ด ์ข๋ค.
๋จ์ ์ผ๋ก๋ ๋ชจ๋ ์ฝ๋๋ฅผ ํจ์ํ ํ๋ค ๋ณด๋ ์ฌ์ฉํ ์ ์๋ ์์์ด ์ ํ์ด ์์ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ aws ๊ฐ์ FaaS ์ ๊ณต์ฌ์ ๊ฐํ ์์กด์ ํ๊ฒ ๋๋ค.
๐ก JavaScript์์ ๋ฐฐ์ ๋ HTML์ ์ ๊ทผ๊ฐ๋ฅ์ผ ํด์ฃผ๋ ๊ฐ์ฒด ๋ชจ๋ธ์ธ DOM์ ์ข ๋ ํจ์จ์ ์ธ ๋ฒ์ (?) ์ผ๋ก ํ์์ํจ ๊ฒ์ด
์ด React์ Virtual DOM ์ด๋ผ๊ณ ํ๋ค.
์๋น์ค์ ๋ฐ๋ผ Web์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋, ๋น์ฐํ๊ฒ๋ DOM ์กฐ์์ด ์ด์ ๋ณด๋ค ๋์ฑ ๋น๋ฒํ๊ฒ ์ผ์ด๋๊ฒ ๋ ๊ฒ์ด
Virtual DOMํ์์ ๋ฐฐ๊ฒฝ์ด๋ค. DOM์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉํ ์๋ก ๋ธ๋ผ์ฐ์ ์ ์ ๊ทผํ๋ ๊ณผ์ ์์ ๋ธ๋ผ์ฐ์ ๋ ๋ ๊ณผ์ ์ ์ ๋ฐ์์ผ
์ฌ์ฉ์๋ก๋ถํฐ ๋ถํธํ์ ์ ๋ฐ ์ํฌ ์๋ ์๋ค. ๊ทธ๋์ ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ์ธ์์ ๋์จ ์ด ๊ธฐ์ ์ DOM์ ๋ฐ๋ก ๋ฐ์์ ์ํค์ง
์์ ์ํ๋ก ํ๋์ ๊ฐ์ ๋ ์ด์ด์ด๋ฉฐ, ์ ์ฉ๋๋ ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ์๋ค๊ฐ ํ๋ฒ์ DOM์ ๋ณด๋ธ๋ค.
์ด๋ก ์ธํด DOM์ ๋จ ํ ๋ฒ์ ์
๋ฐ์ดํธ๋ก ๋จ ํ ๋ฒ์ ๋ ๋๋ง ํ๊ฒ๋์ด ๋ธ๋ผ์ฐ์ ์ ๋ผ์น๋ ์ํฅ์ ๋ํญ ์ค์ด๊ฒ ๋๋ค.
๋ฌผ๋ก DOM์ผ๋ก ํ ๋ฒ์ ์ ์ฉ๊ฐ๋ฅํ ๊ฒ์ Virtual DOM์ด๋ผ๋ ๊ฐ์ ๋ ์ด์ด๋ฅผ ํ ๋ฒ ๊ฑฐ์น๊ณ ์ ์ฉ์ ํ๋, DOM์ ์ด ๊ฒ๋ณด๋จ ๋๋ฆฌ๊ธด
ํ์ง๋ง, ์ฌ์ค์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ์ฉ๋๋ ์๋๊ฐ ๊ทธ๋ ์ง ์ค์ ๋ก ์ฌ์ฉ์๋ค์ด ๋๋ผ๊ธฐ์๋ DOM์ด๋ Virtual DOM ์ด๋ ์๋์ ์ฐจ์ด๋ฅผ
๋ชป ๋๋ ์ ๋๋ผ๊ณ ํ๋ค.
[์ ๋ณด ์ถ์ฒ](https://velog.io/@woohm402/virtual-dom-and-react)
๊ทธ๋์ ๊ฒฐ๋ก react๊ฐ ํ ์์ ๊ฐ์ฅ ์ธ๊ธฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ ์ด์ ๋ ์๋ง๋ ์ด Virtual DOM์ ๋ง์ ์์๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ด ์๋๊น..?
// ๊ธฐ๋ณธ
function sayHello () {
return "hello world!"
}
// ์์ 1 - ๊ธฐ๋ณธ์ ์ธ ํจ์ ํํ ๋ฐฉ์
const sayHelloOnClick = () => {
console.log('hello friend')
}
<App onClick={sayHelloOnClick} />
// โ๏ธ ์์ 1 - ์ต๋ช
ํจ์
<App onClick={() => console.log('hello friend')} />
// ์์ 2 - ๊ธฐ๋ณธ์ ์ธ ํจ์ ํํ ๋ฐฉ์
const ReturnItem = (item) => {
return <div>{item}</div>
}
{array.map(ReturnItem)}
// โ๏ธ ์์ 2 - ์ต๋ช
ํจ์
{array.map((item)=> <div>{item}</div>))}
๊ตฌ์กฐ ๋ถํด ํ ๋น : ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๊ตฌ์กฐ๋ถํด
๊ฐ์ฒด ๊ตฌ์กฐ๋ถํด ํ ๋น ์ฝ๋ ๋น๊ต
//๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ฌ์ฉํ์ง ์์ ๋
const user = {name: "์์๊ตฌ", age: 10};
console.log(user.name) // ์์๊ตฌ
console.log(user.age) // 10
// ๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ฌ์ฉ
const { name, age } = user
console.log(name) // ์์๊ตฌ
console.log(age) // 10
//๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ฌ์ฉํ์ง ์์ ๋
const games = ['๋ฐฐํ๊ทธ๋ผ์ด๋', '๋ฆฌ๊ทธ์ค๋ธ๋ ์ ๋'];
console.log(game[0]) // ๋ฐฐํ๊ทธ๋ผ์ด๋
console.log(game[1]) // ๋ฆฌ๊ทธ์ค๋ธ๋ ์ ๋
// ๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ฌ์ฉ
const games = ['๋ฐฐํ๊ทธ๋ผ์ด๋', '๋ฆฌ๊ทธ์ค๋ธ๋ ์ ๋'];
console.log(game[0]) // ๋ฐฐํ๊ทธ๋ผ์ด๋
console.log(game[1]) // ๋ฆฌ๊ทธ์ค๋ธ๋ ์ ๋
//๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ฌ์ฉํ์ง ์์ ๋
// user๊ฐ ๊ฐ์ฒด์ผ ๋
const getUserName = (user) => {
return user.name
}
// user๊ฐ ๋ฐฐ์ด์ผ ๋
const getUserName = (user) => {
return user[0]
}
// ๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ฌ์ฉ
// ๊ฐ์ฒด์ผ ๋
const getUserName = ({name, age}) => {
return name;
};
// ๋ฐฐ์ด์ผ ๋
const getUserName = ([name, age]) => {
return name
};
๊ธฐ์กด์ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๊ฐ์ ์์์ํค์ง ์๊ณ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ (๊น์ ๋ณต์ฌ)
const box = {size: "big", color: "red"};
const newBox = { ...box}; // {size: "big", color: "red"}
const newBlueBox = {...box, color: "blue" }; // {size: "big", color: "blue"}
๊ฐ์ฒด๋ ๋ฐฐ์ด์์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ํ์ ๋ ๋๋จธ์ง ์ ๋ณด๋ฅผ ๋ฌถ์ด์ ํํํ ์ ์๋ค.
const user ={id: 1, name: "๋๋ฆฌ", age: 10, location: "seoul"};
// rest ์ฌ์ฉ
const {name, ...rest} = user;
// ์ฝ์์ rest๋ฅผ ์ฐ์ด๋ณด๋ฉด, ๊ตฌ์กฐ๋ถํด ํ ๋น์ ํ ์ ๋ณด๋ฅผ ์ ์ธํ ๋๋จธ์ง ๊ฐ์ ๋ณด์ฌ์ค๋๋ค.
console.log(rest) // {id: 1, age: 10, location: "seoul"}
๐ก ์ปดํฌ๋ํธ๋ ํ๋์ ๋ธ๋ก -> ํจ์๋ก ์ด๋ฃจ์ด์ง -> ์ฝ๋์ ์ ์ง๋ณด์ ๋ฐ ๊ฐ๋
์ฑ์ด ์ข์์ง๋ ํจ๊ณผ๋ฅผ ๋ณด์ฌ์ค
๋ถ๋ชจ ์ปดํฌ๋ํธ : ํ์ ์ปดํฌ๋ํธ๋ฅผ ํ๋ ์ปดํฌ๋ํธ
์์ ์ปดํฌ๋ํธ : ๋ค๋ฅธ ์ปดํฌ๋ํธ ์์์ ํ์ด์ง๋ ์ปดํฌ๋ํธ
์์ ๋ก ํ์ธ
// src/App.js
import React from "react";
function Child() {
return <div>์ฐ๊ฒฐ ์ฑ๊ณต</div>;
}
// Mother > Child
function Mother() {
return <Child />;
}
// GrandFather > Mother
function GrandFather() {
return <Mother />;
}
// App > GrandFather
function App() {
return <GrandFather />;
}
export default App;