๐Ÿ“š Study/JS, JQuery

[React JS]Components์™€ Props

kkh1902 2022. 1. 29. 20:23
728x90
๋ฐ˜์‘ํ˜•

์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•ด UI๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ณ„์ ์ธ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์กฐ๊ฐ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐœ๋…์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ปดํฌ๋„ŒํŠธ API ๋ ˆํผ๋Ÿฐ์Šค๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋…์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋Š” JavaScript ํ•จ์ˆ˜์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. “props”๋ผ๊ณ  ํ•˜๋Š” ์ž„์˜์˜ ์ž…๋ ฅ์„ ๋ฐ›์€ ํ›„, ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ JavaScript ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

์ด ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ํ•˜๋‚˜์˜ “props” (props๋Š” ์†์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค) ๊ฐ์ฒด ์ธ์ž๋ฅผ ๋ฐ›์€ ํ›„ React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์œ ํšจํ•œ React ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” JavaScript ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ง ๊ทธ๋Œ€๋กœ “ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ”๋ผ๊ณ  ํ˜ธ์นญํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ES6 class๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

React์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ์œ„ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

class๋Š” ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ์žฅ์—์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋•Œ๊นŒ์ง€๋Š” ๊ฐ„๊ฒฐ์„ฑ์„ ์œ„ํ•ด ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๋‘˜ ๋‹ค ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ์žฅ์—์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง

์ด์ „๊นŒ์ง€๋Š” DOM ํƒœ๊ทธ๋งŒ์„ ์‚ฌ์šฉํ•ด React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒˆ์Šต๋‹ˆ๋‹ค.

const element = <div />;

React ์—˜๋ฆฌ๋จผํŠธ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋กœ๋„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const element = <Welcome name="Sara" />;

React๊ฐ€ ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์ž‘์„ฑํ•œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด JSX ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ ์ž์‹์„ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์— ๋‹จ์ผ ๊ฐ์ฒด๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋ฅผ “props”๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ํŽ˜์ด์ง€์— “Hello, Sara”๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

function Welcome(props) {  return <h1>Hello, {props.name}</h1>;
}

const element = <Welcome name="Sara" />;ReactDOM.render(
  element,
  document.getElementById('root')
);

CodePen์—์„œ ์‹œํ—˜ํ•ด๋ณด๊ธฐ

์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ๋“ค์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

  1. <Welcome name="Sara" /> ์—˜๋ฆฌ๋จผํŠธ๋กœ ReactDOM.render()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  2. React๋Š” {name: 'Sara'}๋ฅผ props๋กœ ํ•˜์—ฌ Welcome ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. Welcome ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฒฐ๊ณผ์ ์œผ๋กœ <h1>Hello, Sara</h1> ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. React DOM์€ <h1>Hello, Sara</h1> ์—˜๋ฆฌ๋จผํŠธ์™€ ์ผ์น˜ํ•˜๋„๋ก DOM์„ ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜: ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

React๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ DOM ํƒœ๊ทธ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด <div />๋Š” HTML div ํƒœ๊ทธ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, <Welcome />์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๋ฒ”์œ„ ์•ˆ์— Welcome์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ทœ์น™์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ ์ถœ๋ ฅ์— ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์„ธ๋ถ€ ๋‹จ๊ณ„์—์„œ ๋™์ผํ•œ ์ถ”์ƒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. React ์•ฑ์—์„œ๋Š” ๋ฒ„ํŠผ, ํผ, ๋‹ค์ด์–ผ๋กœ๊ทธ, ํ™”๋ฉด ๋“ฑ์˜ ๋ชจ๋“  ๊ฒƒ๋“ค์ด ํ”ํžˆ ์ปดํฌ๋„ŒํŠธ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Welcome์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ Œ๋”๋งํ•˜๋Š” App ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

function App() {
  return (
    <div>
      <Welcome name="Sara" />      <Welcome name="Cahal" />      <Welcome name="Edite" />    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

CodePen์—์„œ ์‹œํ—˜ํ•ด๋ณด๊ธฐ

์ผ๋ฐ˜์ ์œผ๋กœ ์ƒˆ React ์•ฑ์€ ์ตœ์ƒ์œ„์— ๋‹จ์ผ App ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ์กด ์•ฑ์— React๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” Button๊ณผ ๊ฐ™์€ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋ทฐ ๊ณ„์ธต์˜ ์ƒ๋‹จ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์ ์ง„์ ์œผ๋กœ ์ž‘์—…ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ์ถ”์ถœ

์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•˜์ง€ ๋งˆ์„ธ์š”.

๋‹ค์Œ Comment ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.

function Comment(props) {
  return (
    <div className="Comment">
      <div className="UserInfo">
        <img className="Avatar"
          src={props.author.avatarUrl}
          alt={props.author.name}
        />
        <div className="UserInfo-name">
          {props.author.name}
        </div>
      </div>
      <div className="Comment-text">
        {props.text}
      </div>
      <div className="Comment-date">
        {formatDate(props.date)}
      </div>
    </div>
  );
}

CodePen์—์„œ ์‹œํ—˜ํ•ด๋ณด๊ธฐ

์ด ์ปดํฌ๋„ŒํŠธ๋Š” author(๊ฐ์ฒด), text(๋ฌธ์ž์—ด) ๋ฐ date(๋‚ ์งœ)๋ฅผ props๋กœ ๋ฐ›์€ ํ›„ ์†Œ์…œ ๋ฏธ๋””์–ด ์›น ์‚ฌ์ดํŠธ์˜ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ด ์ปดํฌ๋„ŒํŠธ๋Š” ๊ตฌ์„ฑ์š”์†Œ๋“ค์ด ๋ชจ๋‘ ์ค‘์ฒฉ ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด์„œ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํž˜๋“ญ๋‹ˆ๋‹ค. ์ด ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € Avatar๋ฅผ ์ถ”์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

function Avatar(props) {
  return (
    <img className="Avatar"      src={props.user.avatarUrl}      alt={props.user.name}    />  );
}

Avatar ๋Š” ์ž์‹ ์ด Comment ๋‚ด์—์„œ ๋ Œ๋”๋ง ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ props์˜ ์ด๋ฆ„์„ author์—์„œ ๋”์šฑ ์ผ๋ฐ˜ํ™”๋œ user๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

props์˜ ์ด๋ฆ„์€ ์‚ฌ์šฉ๋  context๊ฐ€ ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ ์ž์ฒด์˜ ๊ด€์ ์—์„œ ์ง“๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ Comment ๊ฐ€ ์‚ด์ง ๋‹จ์ˆœํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

function Comment(props) {
  return (
    <div className="Comment">
      <div className="UserInfo">
        <Avatar user={props.author} />        <div className="UserInfo-name">
          {props.author.name}
        </div>
      </div>
      <div className="Comment-text">
        {props.text}
      </div>
      <div className="Comment-date">
        {formatDate(props.date)}
      </div>
    </div>
  );
}

๋‹ค์Œ์œผ๋กœ Avatar ์˜†์— ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์„ ๋ Œ๋”๋งํ•˜๋Š” UserInfo ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

function UserInfo(props) {
  return (
    <div className="UserInfo">      <Avatar user={props.user} />      <div className="UserInfo-name">        {props.user.name}      </div>    </div>  );
}

Comment ๊ฐ€ ๋”์šฑ ๋‹จ์ˆœํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

function Comment(props) {
  return (
    <div className="Comment">
      <UserInfo user={props.author} />      <div className="Comment-text">
        {props.text}
      </div>
      <div className="Comment-date">
        {formatDate(props.date)}
      </div>
    </div>
  );
}

CodePen์—์„œ ์‹œํ—˜ํ•ด๋ณด๊ธฐ

์ฒ˜์Œ์—๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์ž‘์—…์ด ์ง€๋ฃจํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋†“๋Š” ๊ฒƒ์€ ๋” ํฐ ์•ฑ์—์„œ ์ž‘์—…ํ•  ๋•Œ ๋‘๊ฐ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. UI ์ผ๋ถ€๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ (Button, Panel, Avatar), UI ์ผ๋ถ€๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ๋ณต์žกํ•œ (App, FeedStory, Comment) ๊ฒฝ์šฐ์—๋Š” ๋ณ„๋„์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ ๋ชจ๋‘ ์ปดํฌ๋„ŒํŠธ์˜ ์ž์ฒด props๋ฅผ ์ˆ˜์ •ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ sum ํ•จ์ˆ˜๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.

function sum(a, b) {
  return a + b;
}

์ด๋Ÿฐ ํ•จ์ˆ˜๋“ค์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ผ๊ณ  ํ˜ธ์นญํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ๊ฐ’์„ ๋ฐ”๊พธ๋ ค ํ•˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ๋™์ผํ•œ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ๋‹ค์Œ ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ์ž…๋ ฅ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ˆ˜ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

function withdraw(account, amount) {
  account.total -= amount;
}

React๋Š” ๋งค์šฐ ์œ ์—ฐํ•˜์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ์—„๊ฒฉํ•œ ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  React ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์˜ props๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ฐ˜๋“œ์‹œ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ UI๋Š” ๋™์ ์ด๋ฉฐ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์žฅ์—์„œ๋Š” “state”๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. React ์ปดํฌ๋„ŒํŠธ๋Š” state๋ฅผ ํ†ตํ•ด ์œ„ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž ์•ก์…˜, ๋„คํŠธ์›Œํฌ ์‘๋‹ต ๋ฐ ๋‹ค๋ฅธ ์š”์†Œ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ž์‹ ์˜ ์ถœ๋ ฅ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•