Programming Language 3

JavaScript는 싱글스레드인데 어떻게 동시에 여러 일을 할까?

JavaScript는 싱글스레드입니다. JavaScript를 사용하는 사람들이라면 분명히 들어본 말입니다. 그런데 이상하지 않나요? fetch('https://api.example.com/data') // 서버에서 데이터 가져오는 중console.log('로딩중...') // 이건 바로 실행됨updateAnimation() // 애니메이션도 돌아감 분명 API 호출하고, 로그 찍고, 애니메이션 돌리고... 동시에 여러 일이 일어나는데요? 스레드가 하나면 한 번에 한 가지만 할 수 있는 거 아닌가요? "비동기 처리를 하니까 가능하다"는 건 알겠는데, 그게 대체 어떻게 가능한 건지 이해가 잘 안 됩니다. 비동기는 말 그대로 동시에 여러 작업을 하는 거잖아요. 싱글스레드가 어떻게 동시에 여러 일을 하죠?..

tsx는 되는데 tsc는 안돼요: 유니언 타입 단언의 함정

// 런타임 코드let a = 3let b = ab.toUpperCase() // TypeError!​let a: number | string = 3let b = a as string이 코드를 tsx practice.ts로 실행하면? 잘 돌아갑니다. tsc practice.ts로 컴파일하면? 타입을 변환할 수 없다는 에러가 나옵니다. 어? a의 타입이 number | string 인데, string도 포함되어 있잖아? 왜 안돼? 이 의문을 풀려면 표면적인 문법이 아니라, TypeScript가 내부적으로 어떻게 동작하는지를 이해해야 합니다. 오늘은 코드 뒤에 숨은 원리를 파헤쳐보겠습니다. TypeScript의 가장 중요한 진실: 타입은 컴파일 타임에만 존재한다컴파일 타임 vs 런타임프로그램이 실행되는..

호이스팅? 생각보다 쉽습니다

호이스팅의 개념호이스팅(Hoisting)은 영어로 "끌어올리다"라는 뜻입니다. 쉽게 비유하자면, 선생님이 출석을 부를 때를 생각해보면 됩니다. 선생님은 수업 시작하기 전에 이미 출석부에 학생 이름이 다 적혀있어야 합니다. 수업 중간에 "어? 이 학생 이름이 없네?"라고 하면 안됩니다. JavaScript도 마찬가지입니다. 코드를 실행하기 전에 JavaScript 엔진이 코드를 쭉 훑어보면서 "어떤 변수들과 함수들이 있는지"를 미리 파악합니다. 이때 변수와 함수 선언을 코드의 최상단으로 끌어올리는 것처럼 동작하는 게 호이스팅입니다. 정확한 정의: 변수 및 함수 선언이 스코프(유효범위)의 최상단으로 끌어올려지는 JavaScript 동작 방식 호이스팅의 의의왜 이런게 있을까요? 호이스팅은 JavaScrip..