useEffect(() => { //처음으로 데이터를 받아올때 유용하게 사용할 수 있다
    fetch(`data/test.json`)
    .then(res => res.json())
    .then(data => {
        console.log("데이터 받기 성공");
        setProducts(data);
    })
    return () => {
        console.log("청소 됨")  //useEffect가 새로 호출될때마다 호출됨
    }
}, []); //두번째 배열 빈배열로 넣으면 딱 한번만 호출함
const UseMemo = useMemo(() => doSomething(), []); 
	// useEffect처럼 딱 한번만 실행하거나 어떤 특정값이 변경될때마다 실행 시킬 수 있음
  // 캐싱하여 성능향상 할때 주로 사용 (메모기능)
	// useCallback()과도 유사함
const Memo = memo(({prop1}) => {
	//단순 UI 컴포넌트의 리렌더링 방지
	//props가 변경되면 리렌더링된다.
})