면접을 보면서 벽을 느꼈던 키워드와 핵심 개념에 대해서 정리해보려 합니다. 일단 과제 구현 평가에 있어서 확장가능한
이라는 키워드를 놓쳐서 아쉽습니다. 커스텀 훅을 사용해서라도 어떤 타입이 들어왔을 때 다른 방식으로 출력이 되는 모듈을 만들어서 진행을 했어야 했나하는 아쉬움이 남네요.
가장 핵심적인 키워드는 메모리와 값
, 멀티스레딩
, 함수형/객체지향 프로그래밍
, call by value / reference
, 자료구조
, 재귀
입니다. 많이 부족한 부분을 느끼고 키워드를 정리하고자 합니다.
컴퓨터는 모든 정보를 0과 1로 저장한다.
🔗 부동소수점 실수 탐구 in 자바스크립트
🔗 자바스크립트 소수점 계산오류 가볍게 이해하기
부동소수점 저장에 관한 규약은 IEEE 754라는 표준으로 정해져 있고, IEEE 754에서 (단정밀도 부동소수점인 float)와 (배정밀도 부동소수점인 double)의 저장방식은 다릅니다.
부동소수점 방식은 부호(+,-) 가수 * 기수^지수로 구성되며, 이를 섹션별로 표현하는 방식과 전환하는 과정에서 한계를 가지기에 저장된 값도 미세한 차이가 발생합니다.
자료형 | 크기 | 부호 | 지수 | 가수 |
---|---|---|---|---|
float | 32bit | 1bit | 8bit | 23bit |
double | 64bit | 1bit | 11bit | 52bit |
추가적으로 자바스크립트의 경우 기본형과 참조형 간의 메모리 활용 방식이 다릅니다. 아래 자료를 참고하면 엔진에서 어떻게 메모리에 값을 활용하는지 이해하기 쉽습니다.
원시타입의 값은 항상 변경불가능(immutable) 합니다. 그리고 참조를 활용하여 메모리 주소에 따라서 우리는 식별자에 대한 값을 거쳐서 전달 받습니다. 때문에 우리는 메모리에 있는 값을 접근 할 때 만약 +1 과 같은 변화를 주게 된다면 새로운 메모리에 씌여진 값을 다시금 향하게 됩니다.
let myNumber = 23
let newVar = myNumber
myNumber = myNumber + 1
콜 스택과 메모리 힙으로 이뤄진 자바스크립트 V8 엔진에서 원시 타입의 데이터는 콜 스택에 참조 타입의 데이터는 메모리 힙을 활용하여 저장되고 접근합니다.
자바스크립트는 익히 알고 있듯이 싱글 스레드 언어입니다. 하지만 현실에서 자바스크립트 엔진이 독립적으로 실행되지 않고, 웹 브라우저나 Node.js와 같은 멀티스레드 환경에 임베디드되어 실행됩니다. 때문에 자바스크립트와 Web API, 이벤트 루프 등을 분리하여 말하기 어렵습니다. 따라서, 이러한 타이밍을 클라이언트 개발자로서 알아야할 필요가 있습니다.
코드(프로세스) 내에서의 함수(스레드)의 비유
딥러닝 알고리즘은 본질적으로 많은 양의 단순 사칙연산(행렬 곱셈 등)을 수행합니다. 따라서 아래와 같은 설계를 가진 GPU가 머신러닝에 더 활용 됩니다.