TIL 230104 메모이제이션, Object.assign

Chae·2023년 1월 4일

TIL 2301

목록 보기
2/2
post-thumbnail

🎆 오늘 한 것

  • 수업 정리 / 복습

🙄 오늘 하려고 했는데 못한 것

  • 다이소 가서 유리병, 공책, 샤프심 사오기
  • 리액트 강의
  • 콜백 함수 공부



✨ 오늘 수업

🎇 메모이제이션

재귀함수 시간 도중에 리액트 useMemo 훅을 사용해서 구현하던 메모이제이션의 간단한 설명을 들었음.

📌 재귀를 이용한 피보나치 수열 구하기

피보나치 수열 - 위키피디아

첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열

function fibonacci(n) {
  if (n <= 0) return 0;
  if (n <= 2) return 1;
  return fibonacci(n - 1) + fibonacci(n - 2);
}

어마어마하게 많은 연산을 하기 때문에 겁나는 코드

이걸 메모이제이션을 이용해서 연산 시간을 엄청나게 단축 시킬 수 있다.

📌 메모이제이션을 이용한 피보나치 수열 구하기

const memoFibo = (n) => {
  if (n <= 0) return 0;
  if (n <= 2) return 1; // 1 1 2 
  if (memoFibo.cache[n]) {
    return memoFibo.cache[n];
  } else {
    return (memoFibo.cache[n] = memoFibo(n - 1) + memoFibo(n - 2));
  }
};

memoFibo.cache = {};

함수도 객체이기 때문에, cache라는 객체를 프로퍼티로 넣은 것임
값을 순차적으로 cache 객체에 집어넣고 이미 존재하고 있는 캐시값을 빼와서 값을 다시 지정하는 것이기 때문에? 연산 횟수가 화악 줄어든다.


🎇 Object.assign

객체들의 모든 열거 가능한 자체 속성을 복사하는 메서드. 그 후 대상 객체를 반환함

const copydObject = (object) => Object.assign({}, object);

// function copydObject(object){
//   return Object.assign({},object)
// }

🎇 배열 구조 분해 할당

let total = 0;
for (let [key, value] of Object.entries(salaries)) {
  console.log(key); // John Ann Pete
  // console.log(keyValue);
  // let key = keyValue[0];
  // let value = keyValue[1];

  total += value;
}
console.log(total); // 690

그래도 여러 번 해봤다고 생각했던 구조 분해 할당인데, 낯선 것들 여러 개 합쳐져 있으니 눈이 핑글핑글 돌았다...





🎆 내일 할 것

  • 수업 정리 / 복습
  • 리액트 강의
  • 알고리즘 문제 풀이
  • 콜백 함수 공부
  • 다이소 가서 유리병, 공책, 샤프심 사오기

📌 언젠가 해야되는 todo

  • preload / modulepreload / prefetch 공부... 언제하지?
  • deep dive 19장 프로토 타입
  • deep dive 25장 클래스
  • 테일윈드 다크모드 공부
  • 사이트 하나 잡고 리액트(Sass나 tailwind)로 클론 코딩(+다크모드까지)
  • Sass 공부...

📚 이번 주 개인 목표

  • 리액트 리덕스 툴킷까지 대충이라도 복습
  • 리액트 SPA 섹션 보기
  • deep dive 33~36
  • 알고리즘 강의 문제 해결, 선택 어쩌고 문제 풀어보기
  • 매일 백준이나 프로그래머스 알고리즘 간단한 거 풀이 1개
  • this ✅
  • callback 함수


📝 오늘의 일기

일이 좀 있어서 오늘은 공부를 거의 못했다


profile
TIL(거의 일기)위주. 공부한 것들은 정리해서 깃허브에 올리고 있습니다. 개인적으로 공부 중인 내용들이기 때문에 틀린 정보가 있을 수 있습니다.

0개의 댓글