JavaScript 함수, 스레드 및 비동기 실행
JavaScript가 내부적으로 어떻게 작동하는지 이해해야 합니다.
다음은 함수, 프로세스, 스레드 및 실행 방식에 대한 상세 설명입니다.
JavaScript 함수의 종류
- 이름이 있는 함수 (Named Function): 특정 이름을 사용합니다. 이는 디버깅을 쉽게 만듭니다.
- 익명 함수 (Anonymous Function): 이름이 없습니다. 주로 콜백 함수로 사용됩니다.
- 함수 표현식 (Function Expression): 함수를 변수에 할당합니다.
- 화살표 함수 (Arrow Function):
=>기호를 사용하는 더 짧은 문법입니다. - IIFE: 즉시 실행 함수 표현식(Immediately Invoked Function Expression)입니다. 정의하자마자 바로 실행됩니다.
프로세스(Process) vs 스레드(Thread)
프로세스는 컴퓨터에서 실행 중인 프로그램입니다.
- 각 프로세스는 자신만의 메모리를 가집니다.
- 한 프로세스가 충돌하더라도 다른 프로세스는 계속 실행됩니다.
- 예: Chrome과 Spotify는 별개의 프로세스입니다.
스레드는 프로세스 내부의 작은 단위입니다.
- 스레드는 동일한 메모리를 공유합니다.
- 스레드를 통해 하나의 프로그램이 동시에 여러 작업을 수행할 수 있습니다.
- 예: Chrome 내부에서 한 스레드는 페이지를 렌더링하고, 다른 스레드는 마우스 클릭을 처리합니다.
동기(Synchronous) vs 비동기(Asynchronous)
JavaScript는 싱글 스레드(single-threaded)입니다. 콜 스택(call stack)을 사용하여 한 번에 하나의 작업만 처리합니다.
동기 실행 (Synchronous Execution):
- 작업이 차례대로 실행됩니다.
- 각 작업은 이전 작업이 끝날 때까지 기다립니다.
- 느린 작업은 코드 실행을 차단(block)합니다.
비동기 실행 (Asynchronous Execution):
- 작업이 백그라운드에서 실행됩니다.
- 작업이 완료되기를 기다리는 동안 코드 실행이 중단되지 않습니다.
- 이는 Web API, 콜백 큐(Callback Queue), 이벤트 루프(Event Loop)를 사용합니다.
비동기 작동 방식:
- JavaScript가 작업(예: 타이머)을 Web API로 보냅니다.
- 메인 코드는 계속 실행됩니다.
- 작업이 완료되면 콜백 큐로 이동합니다.
- 이벤트 루프는 콜 스택이 비어 있을 때 해당 작업을 콜 스택으로 옮깁니다.
이를 통해 웹 앱을 빠르고 반응성 있게 유지할 수 있습니다.