자바스크립트의 정체
자바의 동생이 아니다. 이름만 자바다.
한눈에
- 자바 ↔ 자바스크립트 = car ↔ carpet — 이름만 겹치는 남남
- 이름은 마케팅 — 원래 Mocha였는데 자바 인기에 편승해 JavaScript로 개명
- OOP가 정반대 — 자바는 클래스 기반(설계도 먼저), JS는 프로토타입 기반(객체가 객체를 직접 참조)
- 겉만 C·자바풍(중괄호·if·for), 속은 Scheme + Self
- ES6 class는 문법적 설탕 — 겉만 클래스, 내부는 여전히 프로토타입
자바를 배운 사람은 자바스크립트라는 이름을 처음 볼 때 자연스럽게 "자바의 웹 버전인가", "자바 동생뻘인가" 하고 넘겨짚는다. 그게 정확히 이 이름을 지은 사람들이 노린 오해다. 자바와 자바스크립트는 기술 계보상 거의 남남이고, 이름이 겹치는 건 순전히 마케팅의 결과다. 유명한 비유 하나로 정리된다 — 자바와 자바스크립트의 관계는 카(car)와 카펫(carpet)의 관계다. 앞 글자가 같을 뿐이다.
결론부터, 이름은 순전히 마케팅
1995년, 넷스케이프의 브렌던 아이크(Brendan Eich)가 이 언어를 열흘 만에 만들었다. 처음 이름은 모카(Mocha), 그다음이 라이브스크립트(LiveScript)였다. 지금 우리가 아는 JavaScript라는 이름은 출시 직전에 갈아 끼운 것이다.
왜 하필 그때 개명했나. 당시 자바가 폭발적으로 인기였고, 넷스케이프는 자바를 만든 썬 마이크로시스템즈와 제휴한 상태였다. "자바 인기에 편승하자"는 판단으로, 이 새 언어를 자바의 동생뻘처럼 보이게 JavaScript로 이름을 바꿔 내놓았다. 기술적 계승이 아니라 브랜딩이었던 셈이다.
속은 정반대다, 클래스 vs 프로토타입
이름만 빌린 게 아니라, 객체지향을 하는 방식 자체가 자바와 정반대다.
- 자바 = 클래스 기반. 설계도(클래스)를 먼저 그리고, 그 설계도로 실체(인스턴스)를 찍어낸다. 붕어빵 틀을 만든 다음 붕어빵을 굽는 순서.
- 자바스크립트 = 프로토타입 기반. 클래스라는 설계도가 아예 없다. 이미 존재하는 객체가 다른 객체를 직접 참조해서 기능을 물려받는다. 틀 없이, 붕어빵이 옆 붕어빵을 보고 자기 걸 만드는 그림에 가깝다.
뿌리가 다르다. 자바스크립트의 혈통은 Scheme(함수형 언어)과 Self(프로토타입 언어)다. 아이크는 원래 Scheme을 넣으려 했는데, 회사가 "자바처럼 보이게 해라"고 했다. 그래서 문법만 C/자바풍으로 발랐다. 중괄호 {}, if, for 같은 겉모습은 자바를 닮았지만, 그 안에서 돌아가는 원리는 완전히 다른 언어다.
함정, ES6 class는 설탕이다
여기서 자바 하던 사람이 제일 크게 헛짚는다. ES6(2015)에서 class 키워드가 들어왔기 때문이다. class가 생겼으니 이제 자바처럼 클래스 기반이 됐다고 넘겨짚기 쉽다.
아니다. ES6의 class는 **문법적 설탕(syntactic sugar)**이다. 겉보기에만 클래스 문법이고, 내부는 여전히 프로토타입으로 동작한다. 익숙한 껍데기를 씌워 접근성을 높였을 뿐, 엔진이 바뀐 게 아니다. 그래서 자바의 클래스라고 생각하고 접근하면, 상속이나 this가 예상과 다르게 굴 때 원인을 못 찾는다. 겉이 클래스라고 속까지 클래스는 아니다.
한눈에, 자바 vs 자바스크립트
| 구분 | 자바 (Java) | 자바스크립트 (JavaScript) |
|---|---|---|
| 개발사 | 썬 마이크로시스템즈 | 넷스케이프 |
| OOP 방식 | 클래스 기반 (설계도 먼저 → 인스턴스) | 프로토타입 기반 (객체가 객체를 직접 참조) |
| 타입 | 정적 (컴파일 때 검사) | 동적 (실행 중 결정) |
| 실행 | JVM에서 실행 | 인터프리터·JIT (브라우저/Node) |
| 둘의 관계 | — | 이름만 빌려옴 |
우리 프로젝트에선
지금 읽고 있는 이 0to1 블로그도, 밤마다 도는 자동화 스크립트도 전부 JS/TS로 짜였다. TypeScript라고 별종이 아니라, 결국 브라우저와 Node.js 위에서 도는 자바스크립트다. 타입 검사라는 안전망을 덧댔을 뿐 실행되는 건 JavaScript다.
그래서 나처럼 자바를 주력으로 하던 사람에겐 이 정체를 아는 게 실전에서 유용하다. class를 자바 클래스로 착각하고 접근했다가 this나 상속에서 헛짚는 대신, "겉은 자바풍, 속은 프로토타입"이라는 지도를 미리 쥐고 코드를 읽게 되기 때문이다.
더 읽기
이름의 유래부터 프로토타입의 속살까지, 한 단계씩 풀어놓은 글들.
- 1. 자바스크립트의 탄생 — poiemaweb — Mocha → LiveScript → JavaScript 개명 과정과 브렌던 아이크의 탄생 비화를 차분히
- 자바스크립트의 아버지 브렌던 아이크 — ITWorld — 창시자 본인의 이야기로 듣는 언어의 배경과 이후 행보
- 객체지향 프로그래밍 (클래스 vs 프로토타입) — poiemaweb — 클래스 기반과 무엇이 어떻게 다른지, 프로토타입의 원리를 단계별로