작성일 : 2025.07.13
작성자 : 이참
동기 : JavaScript를 복습하며, 조급한 마음에 깊게 공부해야 하는 부분을 그냥 넘어가려는 스스로의 모습을 인지하게 되었다. 빠르게 실력을 회복하는 것도 중요하지만, 개발자에게 있어 중요한 것은 해당 기능이 어떻게 동작하며 왜 동작하는 지 아는 것이라고 생각한다. 향후 React, Next.js를 공부할 때에도 지금의 공부가 큰 도움이 될 것이라 생각하므로 조급함은 잠시 내려놓고 JavaScript를 구석구석 파헤쳐보고자 한다.
인터넷의 글을 단순히 읽어본 후 이해했다고 넘기지 말고, 하나 하나 머릿속에 잘 집어넣으며 공부하길 바라는 마음으로 이 시리즈를 시작한다.
JavaScript는 JIT(just-in-time) 컴파일을 하는 인터프리터(interpreter)형 언어이며 타입 체킹을 프로그램 실행 중에 하는 동적 타입 시스템(Dynamic type system)을 갖춘 언어이다. 또한, 기본적으로는 상태와 제어 흐름이 존재해야하는 명령형 언어(imperative)이면서도, 함수가 일급 객체로 취급되는 함수형 언어(functional)이다. 따라서 스타일에 따라 명령형 혹은 함수형처럼 사용할 수 있는 멀티 패러다임을 지원하는 언어이며, 객체지향프로그래밍(OOP) 패러다임도 쓸 수 있다.
아래의 인용은 함수형 언어에 대한 설명인데, 이는 함수가 특별한 존재가 아니라 문자, 숫자, 객체 처럼 함수를 정의하고 사용하는 방식이 매우 자유롭다는 것을 의미한다.
프로그래밍 언어에서 어떤 값이 일급이 되려면 그 값을 변수에 저장할 수 있고, 함수의 인자로 넘길 수 있고, 함수의 결과값으로 반환할 수 있어야 한다.
-프로그래밍 언어의 원리(2022), 오학주 교수님, p.42-
참고로 JavaScript는 1995년 넷스케이프에서 근무하던 브랜든 아이크가 10일 만에 설계한 언어이다. 처음에는 굉장히 부실한 언어였으나, ECMAScript 표준화와 함께 꽤나(?) 업그레이드 되었다고 한다.
아래는 JavaScript를 공부해본 사람이라면 한 번 쯤 본 적이 있을 법한 사진이다. JavaScript는 자유도가 굉장히 높은 만큼, 종종 이해할 수 없는 결과를 내놓기도 한다. 이 문제는 추후 TypeScript를 통해 다소 개선이 된다. (TypeScript에 대해서는 React를 배운 후에 알아보도록 하자.)

오학주 교수님의 <프로그래밍 언어의 이해> 교재를 공부하고나면 각종 언어들을 더욱 흥미롭게 볼 수 있으니(특히 JS), 한 번쯤은 읽어보는 것을 추천한다.
이번 시간에는 워밍업 느낌으로 JavaScript의 특징과 역사에 대해 짧게 알아보았다. 다음 시간에는 변수 선언과 scope, hoisting, data type에 대해 알아보도록 하자.
최근 JavaScript를 복습하다 보니, 이전에 공부했던 개념들이 머릿속에 희미하게 남아있음을 느꼈다. 기본적인 문법 먼저 공부하고, 차근차근 공부하려 했는데 자꾸만 중요했던 사실이 떠올라 가벼운 내용임에도 공부가 지쳤다.
대강 메모해놓은 것을 모아놓으면 이런 내용인데, 이보다 더 중요한 내용들도 있었다는 기억이 있어 생각날 때 마다 메모해두고 차근차근 다루고 기록해보려 한다. 이렇게 모아두면 많지만, 하나씩 쪼개어 공부하다보면 금방 해낼 수 있겠지.
빠르게 가는 것도 중요하지만, 탄탄하고 확실하게 가는 것이 자신감 있는 개발자를 만든다 생각한다. 기억이 나지 않아도, 몰라도 괜찮으니 스스로에게 솔직해지자.
나 스스로를 응원해 !