답변

자바스크립트는 웹 브라우저에서 동작하도록 만들어진 고수준의 인터프리터 기반 언어입니다.
동적 타입을 사용하고 함수형, 객체지향 등 멀티 패러다임을 지원합니다.
단일 스레드 기반이지만 이벤트 루프를 통해 비동기로 동작합니다.
현재는 Node.js 환경 덕분에 브라우저뿐 아니라 서버와 모바일 개발까지 확장된 범용 언어입니다.

키워드 설명

  1. 고수준(High-Level) 언어
    1. 메모리 관리나 하드웨어 세부사항을 신경 쓰지 않고 프로그래밍 가능
  2. 동적 타입(Dynamically Typed) 언어
    1. 변수의 타입이 런타임에 결정됨
    2. let a = 10; a = 'text'; 이런 코드 가능
  3. 인터프리터 기반(비컴파일) 언어
    1. 코드를 브라우저 엔진(V8 등)이 바로 해석하여 실행
    2. 빌드 없이 빠르게 실행되는 특징
  4. 멀티 패러다임 지원
    1. 절차적 프로그래밍
    2. 객체지향(OOP)
    3. 함수형 프로그래밍(FP)
    4. → 현대 JS는 함수형 + 선언적 스타일을 많이 사용
  5. 단일 스레드 기반 + 비동기 이벤트 루프 모델
    1. JS는 싱글 스레드
    2. 하지만 비동기는 이벤트 루프가 처리하여 성능 향상
  6. 브라우저를 위한 언어 → 지금은 범용 언어
    1. 원래는 웹페이지 동적 UI를 위해 태어남
    2. 그러나 현재는 다음 영역까지 확장
      1. Node.js (백엔드)
      2. React Native(모바일 앱)
      3. Electron (데스크톱 앱)
      4. IoT
      5. 서버리스

꼬리질문

  1. 왜 자바스크립트는 싱글 스레드인가요?
    • 💡 자바스크립트는 브라우저 환경에서 UI 조작을 안전하게 하기 위해 싱글 스레드 모델을 채택했습니다.
    • 💡 여러 스레드가 동시에 DOM을 변경하면 일관성과 성능 문제가 발생할 수 있기 때문입니다.
  2. 자바스크립트의 비동기는 어떻게 동작하나요?
    • 💡 자바스크립트는 싱글 스레드이지만, 브라우저나 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는 비동기를 스레드가 아니라 스케줄링으로 처리한다”는 의미
  3. 자바스크립트는 인터프리터 언어인데, V8은 JIT컴파일을 사용하는 이유는?
    • 💡 전통적으로 자바스크립트는 인터프리터 언어였지만, 실행속도를 높이기 위해 현대 엔진(V8 등)은 코드를 인터프리터로 읽은 뒤, 반복 사용되는 코드를 JIT 컴파일러로 기계어로 변환합니다.
    • 💡 결과적으로는 인터프리터+컴파일러 방식을 혼합해 성능을 최적화합니다. 
      • 초창기 JS 엔진: 인터프리터 방식 → 속도 느림
      • V8 구조:
        • Ignition(인터프리터): 코드를 빠르게 실행
        • TurboFan(JIT 컴파일러): 자주 실행되는 코드를 최적화하여 기계어로 컴파일
      • 최적화를 위한 히든클래스, 인라인 캐싱 같은 기법 사용
        • → 속도 개선 극대화

+ Recent posts