자바스크립트는 웹 브라우저에서 동작하도록 만들어진 고수준의 인터프리터 기반 언어입니다. 동적 타입을 사용하고 함수형, 객체지향 등 멀티 패러다임을 지원합니다. 단일 스레드 기반이지만 이벤트 루프를 통해 비동기로 동작합니다. 현재는 Node.js 환경 덕분에 브라우저뿐 아니라 서버와 모바일 개발까지 확장된 범용 언어입니다.
키워드 설명
고수준(High-Level) 언어
메모리 관리나 하드웨어 세부사항을 신경 쓰지 않고 프로그래밍 가능
동적 타입(Dynamically Typed) 언어
변수의 타입이 런타임에 결정됨
let a = 10; a = 'text'; 이런 코드 가능
인터프리터 기반(비컴파일) 언어
코드를 브라우저 엔진(V8 등)이 바로 해석하여 실행
빌드 없이 빠르게 실행되는 특징
멀티 패러다임 지원
절차적 프로그래밍
객체지향(OOP)
함수형 프로그래밍(FP)
→ 현대 JS는 함수형 + 선언적 스타일을 많이 사용
단일 스레드 기반 + 비동기 이벤트 루프 모델
JS는 싱글 스레드
하지만 비동기는 이벤트 루프가 처리하여 성능 향상
브라우저를 위한 언어 → 지금은 범용 언어
원래는 웹페이지 동적 UI를 위해 태어남
그러나 현재는 다음 영역까지 확장
Node.js (백엔드)
React Native(모바일 앱)
Electron (데스크톱 앱)
IoT
서버리스
꼬리질문
왜 자바스크립트는 싱글 스레드인가요?
💡 자바스크립트는 브라우저 환경에서 UI 조작을 안전하게 하기 위해 싱글 스레드 모델을 채택했습니다.
💡여러 스레드가 동시에 DOM을 변경하면 일관성과 성능 문제가 발생할 수 있기 때문입니다.
자바스크립트의 비동기는 어떻게 동작하나요?
💡 자바스크립트는 싱글 스레드이지만, 브라우저나 Node.js의 백그라운드가 비동기 작업을 처리합니다.
💡 완료된 콜백을 이벤트 루프가 큐에서 꺼내 콜스택으로 넣는 방식으로 비동기를 구현합니다.
JS 엔진 (Call Stack)
자바스크립트 코드 자체를 실행하는 스레드(싱글)
Web APIs / Node APIs
setTimeout, fetch, DOM 이벤트 등을 백그라운드에서 처리
JS 엔진이 아님
Callback Queue (Task Queue / Microtask Queue)
비동기 작업이 완료되면 콜백이 큐로 이동
Microtask: Promise then
Macrotask: setTimeout 등
Event Loop
콜스택이 비는 순간, 큐에서 콜백을 꺼내 실행
“JS는 비동기를 스레드가 아니라 스케줄링으로 처리한다”는 의미
자바스크립트는 인터프리터 언어인데, V8은 JIT컴파일을 사용하는 이유는?
💡 전통적으로 자바스크립트는 인터프리터 언어였지만, 실행속도를 높이기 위해 현대 엔진(V8 등)은 코드를 인터프리터로 읽은 뒤, 반복 사용되는 코드를 JIT 컴파일러로 기계어로 변환합니다.