인터뷰 4

[JavaScript] 함수 생성자와 클래스의 차이

함수 생성자(Constructor Functions)란? 함수 생성자는 여러 프로그래밍 언어에서는 '클래스'와 동의어다. 어떤 경우 사람들은 참조 타입(Reference Types), 클래스(Classes), 데이터 타입, 아니면 간단하게 생성자라고 부른다. 클래스에 아직 익숙하지 않다면, 어떤 속성(properties)과 행동(functions)을 정의하도록 해주고, 그 속성과 행동을 통해 여러 객체가 생성될 수 있도록 해주는 생성자라고 이해하면 된다. 클래스는 객체로서 집을 짓기 위한 청사진이라는 비유를 많이 한다. 여러 집이 단 하나의 청사진으로부터 시작하는 것처럼, 여러 객체도 단 하나의 클래스로부터 생성될 수 있다. function Person(name, position) { this.name ..

[JavaScript] 콜스택, 콜백큐, 이벤트 루프의 동작 원리를 통한 비동기 함수의 실행 과정

자바스크립트에서 당연히 의심 없이 사용하던 비동기 함수 실행 과정을 들여다볼 기회가 생겼다. 싱글 스레드 언어인 자바스크립트는 한 줄 한 줄 순서대로 동기적으로 실행되어야 하며, 두 가지 이상의 태스크를 병렬적으로 수행할 수 없어야 하는데, setTimeout이나 웹 API, ES6의 promise 같은 비동기 콜백은 어떻게 실행되고 있는 것일까? 우선 자바스크립트의 두 가지 이상의 statements가 병렬적으로 실행되지 못하는 것은 맞다. 실행은 항상 동기적이다. 자바스크립트 엔진 V8은 프로그램 내 모든 변수의 메모리 할당이 일어나는 Memory Heap과 스택 프레임이 쌓이는 콜 스택으로 이루어져 있고 이 콜 스택(호출 스택)이 하나이므로 싱글 스레드이다. 하지만, 자바스크립트가 실행되는 브라우저..

[JavaScript] 엄격 모드 (use strict)

엄격 모드는 ES5에 도입된 문법이다. 자바스크립트 최상단에 use strict 문구를 넣어 실행한다. 또는 함수 내에서도 작성 가능하다. 엄격 모드를 실행하기 전에는 관용적으로 느슨하게 허용되는 '오류를 유발할 가능성 있는 문법' 때문에 디버깅이 어려운 요인이 되곤 했다. strict mode를 실행해주면 미리 해당 에러를 출력해서 바로잡을 수 있도록 도와준다. 업데이트 될 새로운 명세의 자바스크립트에 대응하기도 편하고, 최적화 이슈에도 도움이 되어서 use strict를 사용이 권고된다. 리액트, 뷰 같은 프레임워크를 사용할 때는 자동으로 엄격 모드를 사용할 수 있게 해줘서 크게 신경쓰지 않았지만, 바닐라 자바스크립트 프로젝트를 할 때는 추가해주는 습관이 좋겠다. 보통 npx로 CRA을 하고 나면 아..

[JavaScript] call, apply and bind

자바스크립트에서는 함수도 객체로 다뤄진다. call(), apply(), bind()는 모두 함수 실행을 제어하기 위해 사용되는 메소드이다. call()과 apply()는 ES5에 도입된 문법이고 bind()는 그후 ES5에 도입되었다. 함수를 즉시 실행하고자 할 때는 call()과 apply()를 사용하고, bind()는 나중에 bound된 함수를 리턴 받아 사용하므로 이후에 실행될 함수를 생각하며 써야 한다. const user = { name: 'Hannah' } const profile = function (location, language) { return `${this.name} is a ${language} programmer, who lives in ${location}`; } consol..

1