jaenny.dev
자바스크립트 가비지 컬렉팅(GC) 어디까지 알고있나?
Frontend 2023. 12. 15. 20:10

자바스크립트 메모리 구조를 모른다면, 이전 글을 먼저 읽고 와주세요! https://jaenny-dev.tistory.com/13 V8 엔진이 사용하는 가비지 컬렉터는 generational GC의 일종으로, 객체의 나이를 기준으로 힙 영역을 여러 하위 영역으로 세분화하여 가비지 컬렉션을 수행합니다. V8 엔진이 수행하는 가비지 컬렉션에는 크게 두 단계가 존재합니다. Minor GC(Scavenger)Minor GC는 New space 영역에 존재하는 새로 생긴 객체들을 가비지 컬렉트합니다.New space 영역에선 '할당 포인터'를 사용하여 새로운 객체를 위한 메모리 영역을 할당하는데, 객체가 새로 할당될 때마다 포인터 값이 증가하다가 New space 영역 끝에 다다르면 Minor GC가 수행됩니다...

article thumbnail
자바스크립트 V8 엔진의 메모리 구조와 사용
Frontend 2023. 12. 15. 19:51

자바스크립트 V8 엔진의 메모리 구조 V8 엔진에서 메모리는 크게 스택(Stack)과 힙(Heap)으로 구성됩니다. 스택(Stack) : 원시 타입 변수, 함수 인자, 객체를 가리키는 포인터 등이 저장되는 공간입니다. 힙(Heap) : 객체 타입과 같이 동적인 데이터를 저장하는 공간입니다. 아래 영역들로 세분화 됩니다. New space : Young generation 이라고도 하는 이 영역은 짧은 생명 주기(short- lived) 를 가지는 새로 생성된 객체가 저장되는 공간입니다. 두 개의 semi-space가 있으며, Scavenger(Minor GC) 가 이 영역을 관리합니다. Old space: Old generation 이라고도 하는 이 영역은 New space에서 두 번의 Minor GC가..

article thumbnail
[타입챌린지/type-challenge] Flatten
Frontend 2023. 2. 4. 16:17

문제 배열을 받아, 배열을 평탄화하여 반환하시오. 예제: type flatten = Flatten // [1, 2, 3, 4, 5] 풀이 제네릭 타입으로 배열을 받아야 하니 T extends any[]로 배열만 받도록 제한해 줍니다. infer와 spread를 사용해서 T 배열의 첫 원소를 First로 가져옵니다. 만약 빈 배열이라면 First로 가져올 수 없으니 바로 T를 리턴해줍니다. 그런데 지금 구현하려는 Flatten은 1 depth만 평탄화하는 것이 아니고, 모든 배열을 평탄화해야 합니다. 따라서 재귀로 구현해 줄 것입니다. First가 배열이 아니여서, 더 이상 평탄화가 필요없는 경우부터 생각해줍니다. First가 배열이 아니라면, 리턴하려는 배열의 첫 번째 자리에 두고, 나머지 원소들을 확인..

article thumbnail
[번역] 2022년 가장 많이 사용된 프론트엔드 프레임워크는 무엇일까?
개발 소식 💌 2023. 2. 3. 23:12

원문 : https://www.devjobsscanner.com/blog/the-most-demanded-frontend-frameworks-in-2022/ 이 기사에서는 어떤 프론트엔드 프레임워크가 가장 많이 사용되었고, 일자리가 많았는지 보여줄 것입니다. DevJobsScanner는 2021년 10월 1일부터 2022년 11월 31일까지 13개월간 약 65만 개의 프론트엔드 일자리를 조사했습니다. 모든 일자리는 Linkedin, Classdorr, RemoteOk, Dice 등 믿음직한 곳으로부터 수집된 것입니다. 가장 많이 사용된 프론트엔드 프레임워크는 무엇인가요? 14개월간 65만개의 FE 일자리를 조사한 후, 약 35.5만 개의 일자리 제안이 있는 React가 가장 많이 사용되는 프론트엔드 프레..

article thumbnail
[타입챌린지/type-challenge] RequiredByKeys
Frontend/Type-Challenge 2023. 1. 31. 22:05

문제 인자로 T와 K 두 개를 받는 제네릭 타입 RequiredByKeys을 구현하세요. K는 T의 프로퍼티들로 필수 타입이 되어야 합니다. K가 전달되지 않는다면, Required와 동일하게 T의 모든 프로퍼티들을 필수로 만들어야 합니다. 예시: interface User { name?: string age?: number address?: string } type UserRequiredName = RequiredByKeys // { name: string; age?: number; address?: string } 풀이 먼저 error 케이스부터 처리해줍니다. K에는 T의 프로퍼티들만 전달되어야 합니다. 따라서 K extends keyof T 로 K의 값을 제한해줍니다. K로 인자가 전달되면 K를 필..