[Typescript] ๐Ÿ™ŠReact Type

์ตœํ•˜์˜ยท2024๋…„ 4์›” 21์ผ

Typescript

๋ชฉ๋ก ๋ณด๊ธฐ
2/5
post-thumbnail

์˜ค๋Š˜์€ React์—์„œ Typescript ์ง€์›์„ ์œ„ํ•ด ์ž์ฒด์ ์œผ๋กœ ์ •์˜ํ•œ ํƒ€์ž…์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ์ฐจ๋ก€์ด๋‹ค.

๐Ÿ•ท๏ธReact Type ์ข…๋ฅ˜

๐Ÿ•ธ๏ธ React.FC

= Functional Component

  • React + Typescript ์กฐํ•ฉ์œผ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ ์‹œ ํƒ€์ž… ์„ ์–ธ์— ์“ธ ์ˆ˜ ์žˆ๋„๋ก react์—์„œ ์ œ๊ณตํ•˜๋Š” ํƒ€์ž…

  • React.FC ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด props ์— ๊ธฐ๋ณธ์ ์œผ๋กœ children์ด ๋“ค์–ด๊ฐ„๋‹ค.

interface TestFC {
    name : string,
    age: number
}
const TestReactFC : React.FC<TestFC> = ({name, age})=> {
    return (
        <>
        <h4>ReactFC ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹น</h4>
        <p>์•ˆ๋…•ํ•˜์„ธ์š” ์ €๋Š” {name} ์ด๊ณ  {age} ์‚ด ์ž…๋‹ˆ๋‹น </p>
        </>
    )
}
export default TestReactFC

์œ„์— React.FC ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๊ฑธ ๋ฉ”์ธํŽ˜์ด์ง€์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ ์ฐจ๋ก€์ด๋‹ค.

//mainpage์—์„œ ๋ถˆ๋Ÿฌ์™€๋ณด์ž
import TestReactFC from "../task4/reactFC"

const MainPage = ()=>{
    return (
        <>
        <div>
            <h2>React.FC ์‚ฌ์šฉํ•ด๋ณด๊ธฐ</h2>
            <TestReactFC name= "wendy" age={26}/>
        </div>
        </>
    )
}
export default MainPage

๊ทธ๋Ÿฐ๋ฐ React.FC๋Š” React ๋ฒ„์ „ 18 ์ด์ „๊นŒ์ง€ ์‚ฌ์šฉํ•˜๋Š”๊ฑธ ์ง€์–‘ ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
๊ทธ ์ด์œ ๋ฅผ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ดค๋Š”๋ฐ,,

  1. ํ•„์ˆ˜ ์†์„ฑ ๊ฐ•์ œํ™”
  • React.FC๋Š” props๊ฐ€ ๋นˆ ๊ฐ์ฒด๋ผ๋„ ํ•„์ˆ˜๋กœ ๋„˜๊ฒจ์ ธ์•ผํ•œ๋‹ค๋Š” ์ œ์•ฝ์ด ์žˆ์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
    => ํ•„์š”ํ•œ props๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ ๋นˆ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์•ผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•จ.
  • ๋”ฐ๋ผ์„œ ์ปดํฌ๋„ŒํŠธ์— children ์ด ์žˆ์„์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์–ธ์ œ๋“ ์ง€ children์˜ํƒ€์ž… ์ง€์ • ์—†์ด ์ „๋‹ฌ์ด ๊ฐ€๋Šฅ => ํƒ€์ž…์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค.
  1. children ํƒ€์ž…์˜ ์ œ์•ฝ
  • React.FC ๋Š” ์ž๋™์œผ๋กœ children ์†์„ฑ์ด ํฌํ•จ๋˜๋Š”๋ฐ, React 18 ๋ฒ„์ „ ์ด์ „์—๋Š” JSX ์š”์†Œ๋ฅผ ๊ฐ•์ œ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผํ–ˆ๋‹ค.
    => 18 ๋ฒ„์ „ ์ดํ›„์—๋Š” ๋ฐ˜ํ™˜ ์š”์†Œ๊ฐ€ ReactNode๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค.

๐Ÿ•ธ๏ธ ReactNode

= react ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ํƒ€์ž… ์ค‘ ํ•˜๋‚˜

  • children ์†์„ฑ์˜ ํƒ€์ž…์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํƒ€์ž…, ๊ฐ€์žฅ ๋„“์€ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง
  • reactElement ๋ฅผ ํฌํ•จํ•˜์—ฌ string, number, undefined ํƒ€์ž… ๋“ฑ JSX ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํƒ€์ž…์„ ํฌํ•จํ•œ๋‹ค.
  • falsy ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋ง ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ReactChild ํƒ€์ž…์— string, number ํƒ€์ž…์ด ํฌํ•จ๋จ.
  • type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
import { ReactNode } from "react";
import styled from "styled-components";

const Box = styled.div`
  background-color: #000;
  color: #fff;
`;

interface ReactNodee {
  children: ReactNode;
}

const TestReactNode = ({ children }: ReactNodee) => {
  return (
    <Box>
      <div>{children}</div>
    </Box>
  );
};

export default TestReactNode;

์ด๋ ‡๊ฒŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฉ”์ธํŽ˜์ด์ง€์— ๋‚˜ํƒ€๋‚ด๋ณด์•˜๋‹ค,

import styled from "styled-components"
import TestReactFC from "../task4/reactFC"
import TestReactNode from "../task4/reactNode"

const MainPage = ()=>{
    return (
        <>
        <BorderBox>
            <h2>React.FC ์‚ฌ์šฉํ•ด๋ณด๊ธฐ</h2>
            <TestReactFC name= "wendy" age={26}/>
        </BorderBox>
        <BorderBox>
            <h2>ReactNode ์‚ฌ์šฉํ•ด๋ณด๊ธฐ</h2>
            <TestReactNode>
                <p>reactnode ์‚ฌ์šฉ์ค‘์ž…๋‹ˆ๋‹ค</p>
            </TestReactNode>
        </BorderBox>
        </>

    )
}
export default MainPage

const BorderBox = styled.div`
border:2px solid #000;
width: 500px;
border-radius: 10px;
padding-bottom:10px;

`

ReactNode์˜ ๊ฐ™์€ ๊ฒฝ์šฐ ์˜ˆ์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ž์„ธํ•˜๊ฒŒ ๋‚˜์™€์žˆ์ง€์•Š์•„์„œ (?๋‚ด๊ฐ€ ๋ชป์ฐพ์€๊ฑด๊ฐ€..) ์ €๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋งž๋‚˜ ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๋ชจ๋“  ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์ €๋ ‡๊ฒŒ ํŠน๋ณ„ํ•œ ํƒ€์ž… ์ง€์ • ์—†์ด {children} ์œผ๋กœ ๋„˜๊ฒจ๋„ ๋˜๋Š”๊ฑธ๊นŒ..?

=> ๋งŒ์•ฝ ํƒ€์ž…์„ ์ง€์ •ํ–ˆ๋‹ค๋ฉด ๊ทธ๋งŒํผ ํƒ€์ž… ์•ˆ์ •์„ฑ์ด ์˜ฌ๋ผ๊ฐ€๊ฒ ์ง€,
=> ์ •ํ•ด์ง„ ๋‹ต์€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค. ์ €๋ ‡๊ฒŒ children์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ „๋‹ฌํ•ด ์ค„ ๊ฒƒ์ธ์ง€, ๊ทธ๋ƒฅ type์„ ์ง€์ •ํ•ด์„œ ๋ถ„๋ฆฌํ• ๊ฒƒ์ธ์ง€๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉด ๋œ๋‹ค.
(ex. title์˜ ๊ฒฝ์šฐ string์œผ๋กœ๋งŒ ํƒ€์ž… ์ง€์ •-> ํƒ€์ž…์•ˆ์ •์„ฑ ์ฆ๊ฐ€)

๐Ÿ•ธ๏ธReactElement

  • react ์ปดํฌ๋„ŒํŠธ๋ฅผ์ •์˜ํ•˜๋Š” ํƒ€์ž… ์ค‘ ํ•˜๋‚˜์ธ๋ฐ , string ๊ณผ number ํƒ€์ž…๋“ฑ ์›์‹œ์ ์ธ ํƒ€์ž… ์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
    => ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ReactNode ํƒ€์ž…์ด ReactElement ํƒ€์ž…์„ ํฌํ•จํ•˜๊ณ ์žˆ๋‹ค.

  • createElemet๋กœ ReactElement๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    =>์›์‹œํƒ€์ž…์„ ํฌํ•จํ•˜์ง€์•Š๋Š” ์ด์œ 

๊ทธ๋ ‡๋‹ค๋ฉด ์˜ˆ์ œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž

type ReactElementProps = {
    children: React.ReactElement
}

const TestReactElement=({children}:ReactElementProps)=> 
{
    return (
        <>
        <div>{children}</div>
        </>
    )
};
export default TestReactElement

//mainpage

<BorderBox>
   <h2>ReactElement ์‚ฌ์šฉํ•ด๋ณด๊ธฐ</h2>
   <TestReactElement>
    {/* reactElement ์‚ฌ์šฉ์ค‘์ž…๋‹ˆ๋‹ค => string ์ปดํŒŒ์ผ ์—๋Ÿฌ*/}
     <p>reactElement ์‚ฌ์šฉ์ค‘์ž…๋‹ˆ๋‹ค</p>
   </TestReactElement>
</BorderBox>

์›์‹œ์ ์ธ ์š”์†Œ๋ฅผ ๋ฐ›์ง€ ์•Š๋Š”๊ฑธ ํ™•์ธํ•ด๋ณด๊ณ ์‹ถ์–ด์„œ ๊ฐ™์ด ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค.
(์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ๋ถ€๋ถ„์ด string์œผ๋กœ ์ž‘์„ฑ -> ์—๋Ÿฌ๊ฐ€ ๋œฌ ๋ถ€๋ถ„์ด๋‹ค.)

๐Ÿ•ธ๏ธPropsWithChildren

  • ๋ง๊ทธ๋Œ€๋กœ "children ์„ ๊ฐ€์ง„ propsํƒ€์ž…" ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐœ๋ฐœ๋œ ๋ฆฌ์•กํŠธ์ปดํฌ๋„ŒํŠธ์—์„œ children์„ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • reactNode ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ children์˜ ํƒ€์ž…์„ ์„ค์ •ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
import { PropsWithChildren } from "react"

type propsWithChildren = PropsWithChildren<{
title:string,
name?:string,
age?:number
}>

const TestPropsWithChildren = 
(props : propsWithChildren)=> {
    const {title, name,age,children} = props
    return(
        <div>
        <p>{title}</p>
        {name && <p>Name: {name}</p>}
        {age && <p>Age: {age}</p>}
        {children}
        </div>
    )
}
export default TestPropsWithChildren

mainpage์— ์ ์šฉํ•ด๋ณด์ž

//mainPage.tsx
<BorderBox>
  <h2>propsWithChildren ์‚ฌ์šฉํ•ด๋ณด๊ธฐ</h2>
  <TestPropsWithChildren 
  title="propsWithChildren" 
  name="wendy" 
  age={26}>
  </TestPropsWithChildren>
</BorderBox>

์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

๐Ÿ•ธ๏ธPropsWithRef

  • React.FC์—์„œ children์„ ์ •์˜ํ•ด์ฃผ์ง€ ์•Š์„๋•Œ ๋‚˜๋Š” ์—๋Ÿฌ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ๋‚˜์˜จํƒ€์ž…์ด๋‹ค.
  • PropsWithRef๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ„๋„์˜ ํƒ€์ž… ์ •์˜ ์—†์ด๋„ ref๋ฅผ ํฌํ•จํ•œ props๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ propsWithRef ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž

import { forwardRef } from "react";

interface PropsWithRef {
    text: string;
}

const TestPropsWithRef = forwardRef<HTMLDivElement, PropsWithRef>(
    (props, ref) => {
        return <div ref={ref}>{props.text}</div>;
    }
);
export default TestPropsWithRef;

์šฐ์„  ๋‚˜๋Š” PropsWithRef ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•œ๋’ค, forwardRef ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ref๋ฅผ ๋‹ค๋ฃจ๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

๐Ÿ”ด ์—ฌ๊ธฐ์„œ ์ž ๊น!

forwardRef ํ•จ์ˆ˜๊ฐ€ ๋ญ์ง€??

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์•กํŠธ์—์„œ ref prop์€ HTML Element๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— prop์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

=> ๋”ฐ๋ผ์„œ ์ด๋•Œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ forwardRef ํ•จ์ˆ˜ ์ด๋‹ค.

const ForwardedComponent = 
forwardRef<RefType, PropsType>((props, ref) => {
    // ์ปดํฌ๋„ŒํŠธ ๋กœ์ง
});
  • RefType: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ „๋‹ฌ๋ฐ›์„ ref์˜ ํƒ€์ž….
    ์ฃผ๋กœ DOM ์š”์†Œ์˜ ํƒ€์ž…
  • PropsType: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ „๋‹ฌ๋ฐ›์„ props์˜ ํƒ€์ž…. ์ฆ‰, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉํ•  props์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•จ.
    -props: ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ๋œ props
  • ref: ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋œ ref
    => ์ด ref๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ DOM ์š”์†Œ๋‚˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ.

๋”ฐ๋ผ์„œ forwardRef ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ref๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋œ ref๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€์˜ DOM ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ›„ ๋‹ค๋ฅธ ์˜ˆ์ œ์™€ ๊ฐ™์ด ๋ฉ”์ธํŽ˜์ด์ง€์—์„œ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•ด๋ดค๋‹ค.

const MainPage = () => {
    const divRef = useRef<HTMLDivElement>(null);
    const onClick = () => {
        if (divRef.current) {
            divRef.current.style.color = "blue";
            divRef.current.style.backgroundColor = "tomato";
        }
    };
return(
<BorderBox>
 	<h2>propsWithRef ์‚ฌ์šฉํ•ด๋ณด๊ธฐ</h2>
 	<TestPropsWithRef 
    	ref={divRef} 
    	text="์•ˆ๋ƒ์„ธ์š” ์›ฝ๋”ฅ๋‹ˆ๋‹น" />
 	<button 
    onClick={onClick}>Button์„ ๋ˆŒ๋Ÿฌ๋ณด๊ฑฐ๋ผ
    </button>
</BorderBox>
)

๐Ÿ•ธ๏ธRefObject

  • ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
interface RefObject<T> {
  readonly current: T | null;
}
  • current ๋ผ๋Š” ์ฝ๊ธฐ์ „์šฉ ์†์„ฑ์„ ๊ฐ€์ง€๋Š”๋ฐ, ์ด๋•Œ current์˜ ํƒ€์ž…์ด T ๋˜๋Š” Null ์ด ๋ ์ˆ˜์žˆ๋‹ค๊ณ  ๋˜์–ด์žˆ๋‹ค.

=> ์ฆ‰ current ๊ฐ’์„ readonly๋กœ ์„ค์ •ํ•ด์คŒ์œผ๋กœ์จ ์ฐธ์กฐ๊ฐ€ ํ•œ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๊ทธ ์ดํ›„์— ํ•ด๋‹น ์ฐธ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๊ณ ์ •์‹œํ‚จ๋‹ค.

  • useRef๋กœ ๋งŒ๋“  ref์˜ ๊ฐ์ฒดํƒ€์ž…์€ 2๊ฐ€์ง€๋กœ ์ •์˜๋œ๋‹ค๊ณ ํ•œ๋‹ค.
  1. ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ
  • ์ด๋•Œ ref.current ๊ฐ’์€ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  1. DOM์„ ์ทจ๋“ํ•˜๋ ค๊ณ  ํ• ๋•Œ ์‚ฌ์šฉ
  • ์ด๋•Œ DOM์ž์ฒด ๊ฐ’์€ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ ํ•˜๋‚˜ .current๊ฐ’์˜ ์†์„ฑ์€ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‚˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ด๋ณด์•˜๋‹ค.

import { useRef } from "react";

interface RefObjectProps {
    text: string;
}

const TestRefObject: React.FC<RefObjectProps> = ({ text }) => {
    const inputRef = useRef<HTMLInputElement>(null);
    const handleFocus = () => {
        if (inputRef.current) {
            inputRef.current.focus();
            inputRef.current.style.color = "red";
        }
    };
    return (
        <>
            <input type="text" ref={inputRef} />
            <button onClick={handleFocus}>ํฌ์ปค์‹ฑ๋ฒ„ํŠผ</button>
            <p>{text}</p>
        </>
    );
};
export default TestRefObject;

์ด๋•Œ current๊ฐ’์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœํ–‰ํ•˜๋ฏ€๋กœ inputRef.current.value = "" ๋กœ ์ž‘์„ฑํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.(์ด๋Š” current์˜ ํ•˜์œ„ ํ”„๋กœํผํ‹ฐ์ด๊ธฐ๋•Œ๋ฌธ์ด๋‹ค)

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