비동기 작업 - 비동기적 작업 : 싱글 스레드 방식을 이용하면서, 동기적 작업의 단점을 극복하기 위해 여러개의 작업을 동시에 실행 시키도록 하는 방식 - 논 블로킹 방식 : 하나의 작업이 스레드를 점유 하지 않아 스레드가 다른 작업을 하지 못하는 블로킹을 하지 않는 방식 비동기 작업의 문제점 비동기 작업은 특정 로직의 실행이 끝날 때 까지 기다리지 않고, 나머지 코드를 실행한다. 대표적인 비동기 작업인 Ajax 통신을 한다고 가정했을 때, function getData(){ let data; $.ajax({ type: 'post', url: 'https://espania.github.io'/, data: { // } success: function(result){ data = result; } }); r..
JavaScript Engine(자바스크립트 엔진) Momoery Heap(메모리 힙) 참조 타입(객체 등) 데이터 들이 저장되는 공간이다. 변수나 상수들에 사용되는 메모리를 저장하는 영역 Call Stack(콜 스택) Primary Type (원시 타입) 데이터 들이 저장되는 공간이다. 우리가 작성한 코드의 실행에 따라서 호출 스택 을 쌓는 영역 자바 스크립트는 싱글 스레드 이기 때문에, 하나의 콜 스택을 가지며 한 번에 하나의 일(Task)만 처리 할 수 있다. 또한, 콜스택은 실행 콘텍스트(Execution Context)를 통해 현재 어떤 함수가 동작하고 있는지, 그 함수 내에서 어떤 함수가 동작하는지, 다음에 어떤 함수가 호출되어야하는지 등을 제어 한다. 즉, 코드 실행 순서 관리 등을 수행 하..
자바스크립트 엔진 개발자가 작성한 코드를 컴퓨터가 이해할 수 있도록 해석하고 실행시켜주는 프로그램 혹은 인터프리터 이다. 표준적인 인터프리터로 구현이 되거나, 자바스크립트 코드를 바이트 코드로 컴파일 하는 JIT 컴파일러로 구현 될 수도 있지만, 주로 웹 브라우저를 위해 사용된다. 자바스크립트 엔진 중 잘 알려진 것이 구글의 V8 엔진이다. V8 엔진 V8은 오픈 소스 자바스크립트 엔진 중 하나 이고, 웹어셈블리(WebAssembly) 엔진이다. 크롬 웹 브라우저와 Node.js 등에서 사용되고 있다. 또한, 자바스크립트를 바이트 코드로 컴파일 하고 실행하는 방식을 사용한다. 자바스크립트 V8 엔진 소스 안에는 하나의 힙과 하나의 콜 스택만 존재한다. 참고 https://espania.tistory.co..
스레드 (Single Thread = 한 가닥) 싱글 스레드란, 하나의 프로세스에서 한가지 작업을 실행하기 위해 순차적으로 실행되는 하나의 흐름이다. 다시말해, 동시에 하나의 코드만 실행할 수 있다는 뜻이다. 자바 스크립트는 싱글 스레드로 하나의 힙 영역과 하나의 콜 스택을 가진다. 하나의 콜 스택을 가지기 때문에 한번에 하나의 일 밖에 하지 못하고, 앞에 일이 완료 될때까지 다음 할 일을 하지 못하고 기다려야 하는 동기적 처리를 한다. 하지만, 자바 스크립트가 싱글 스레드라는 말은 정확히 말하자면, 자바스크립트 자체 즉, '자바스크립트 엔진이 단일 호출 스택을 사용한다' 는 관점에서만 맞는말이고, 실제 자바스크립트가 구동되는 환경(자바스크립트 런타임 / 브라우저나 Node.js) 에서는 주로 멀티 스레..
개념 [ ] 대괄호를 이용해서 배열이나 객체의 값을 순서대로 할당 받아서 사용할 수 있는 방법 배열의 비 구조화 할당 let arr = ['one', 'two', 'three']; let one = arr[0]; let two = arr[1]; let three = arr[2]; 위의 코드를 비 구조화 할당으로 간략하게 나타내면 다음과 같다. let [one, two, three, four] = ["one", "two", "three"]; console.log(one, two, three, four); // one two three undefined 출력 또한, 기본값 설정을 하고 싶다면 다음과 같이 사용한다. let [one, two, three, four='four'] = ['one', 'two', ..
단락 회로 평가 논리 연산자 (&& , ||) 를 사용하여 연산을 진행 할 때 좌측 식의 값에 따라 우측 식의 실행 여부를 판단하는 동작을 단락 회로 평가라고 한다. 예제 getName = (param) => { if(!param){ return "객체가 아닙니다."; } return param.name; } 위 소스를 단락 회로 평가를 사용해서 간단히 표현 할 수 있다. getName = (param) => { const name = param && param.name; return name || "객체가 아닙니다."; } 단락 회로 평가를 사용한 함수를 통해 param의 값에 따라 getName을 호출 했을 때 결과는 다음과 같다. let person = ""; console.log(getName(p..