2009년 웹 개발자 제러미 키스(Jeremy Keith)는 이렇게 말했습니다. "자바(Java)와 자바스크립트(JavaScript)의 관계는 햄(ham)과 햄스터(hamster)의 관계와 같다." 이 비유가 얼마나 정확한지는 논쟁의 여지가 있지만, 그 이면에 담긴 의미는 분명합니다. 자바와 자바스크립트는 이름의 어원을 공유할 뿐, 실제로는 전혀 다른 두 프로그래밍 언어입니다. 시간이 지나면서 두 언어의 영역이 다소 겹치게 되었지만, 여전히 자바스크립트는 웹사이트에 상호작용성을 부여하는 대표적인 프론트엔드 언어로 자리 잡았고, 자바는 서버 사이드 및 애플리케이션 프로그래밍에서 꾸준히 인기를 유지하고 있습니다. 개발자를 채용하려 하거나, 코딩을 배우려 하거나, 웹사이트·애플리케이션을 만들고자 한다면 자바와 자바스크립트의 차이를 이해하는 것이 매우 중요합니다.
서로 다른 탄생 배경
핵심 요약: 자바가 먼저 등장했고, 자바와 비슷하지만 기술적으로는 무관한 자바스크립트는 이후 또 다른 필요를 충족하기 위해 등장했습니다.
자바는 1991년 제임스 고슬링(James Gosling)과 선 마이크로시스템즈(Sun Microsystems)의 연구팀이 약 4년에 걸쳐 개발하여 1995년 출시했습니다. 이들은 여러 운영체제에서 실행될 수 있는 객체 지향 언어를 만들어냈으며, 자바는 이후 휴대폰부터 NASA 로버에 이르기까지 다양한 기기에서 활용되었습니다. 또한 2016년 공식적으로 지원이 종료될 때까지는 자바 애플릿(Java Applet)이라는 형태로, 과거의 플래시나 지금의 자바스크립트처럼 멀티미디어 웹 기술로도 사용되었습니다.
자바스크립트 역시 1995년에 출시되었지만, 넷스케이프(Netscape)의 브렌던 아이크(Brendan Eich)가 단 10일 만에 만든 언어로, 브라우저가 웹 페이지를 로드한 후 사용자가 페이지와 상호작용할 수 있도록 하는 것이 목적이었습니다. 처음에는 1995년 5월 '모카(Mocha)'라는 이름으로 불렸고, 9월에는 넷스케이프 내비게이터에 '라이브스크립트(LiveScript)'라는 이름으로 탑재되었으며, 같은 해 12월에 '자바스크립트'로 명칭이 변경되었습니다. 자바의 경량 스크립팅 보조 언어로 자바와 비슷하게 설계되었기 때문에 이름 자체는 합리적이었고, 동시에 꽤 훌륭한 마케팅 전략이기도 했습니다. 이후 자바스크립트는 HTML, CSS와 함께 현대 인터넷의 3대 핵심 요소 중 하나로 성장했습니다.
기술적 차이점
자바와 자바스크립트 모두 객체 지향 프로그래밍 언어입니다. 즉, 프로그래머는 정보 덩어리(객체)를 만들고 이들을 서로 연결하여 동작을 구현할 수 있습니다. 예를 들어 '고양이' 객체에는 고양이의 이름, 색깔, 나이에 대한 정보와 함께 야옹거리기, 먹기, 자기 같은 행동 목록이 포함될 수 있습니다. 프로그래머는 이 객체의 정보를 활용해 고양이에 대한 정보를 출력하거나 특정 동작을 수행하게 할 수 있습니다.
이것이 두 언어의 가장 큰 공통점입니다. 하지만 여기서부터 차이점이 쏟아집니다.
1. 자바는 컴파일 언어, 자바스크립트는 인터프리터 언어
자바는 "한 번 작성하고, 어디서든 실행한다(write once, run anywhere)"는 시스템을 사용합니다. 작동 방식은 다음과 같습니다.
- 자바로 코드를 작성합니다.
- 코드를 컴퓨터가 읽을 수 있는 바이트코드(bytecode)로 컴파일합니다.
- 자바 가상 머신(JVM)에서 코드를 실행합니다. JVM은 기기 위에서 자바 바이트코드를 실행하는 가상 컴퓨터입니다.
즉, 프로그램을 수정할 때마다 자바 코드를 변경한 후 전체 프로그램을 다시 바이트코드로 변환해야 합니다.
반면 자바스크립트는 작성된 그대로 웹 브라우저가 읽을 수 있습니다. 브라우저는 각 줄을 확인하며 순차적으로 실행합니다. 덕분에 더 유연하고 수정이 쉽지만, 기계어로 직접 실행되지 않기 때문에 성능 면에서는 컴파일된 코드에 비해 뒤처집니다.
2. 정적 타이핑(자바) vs 동적 타이핑(자바스크립트)
프로그래밍 언어의 중요한 부분은 변수에 값을 저장하는 것입니다. 자바는 정적 타이핑(static typing) 언어로, 모든 변수가 어떤 종류의 값을 담을지 미리 선언해야 하며, 한번 정해지면 변경할 수 없습니다. 예를 들면 다음과 같습니다.
int a_number = 42; char a_letter = 'z';
"int"는 반드시 숫자여야 하고, "char"는 반드시 문자여야 합니다.
반면 자바스크립트는 동적 타이핑(dynamic typing) 언어이므로 어떤 변수든 어떤 데이터 타입이든 담을 수 있으며, 문제없이 변경할 수도 있습니다. 아래 코드는 아무 문제 없이 실행됩니다.
let number = 42; let a_letter = "z";
자바는 변수 타입을 선언하기 때문에 오류를 빠르게 발견할 수 있고 코드 실행 속도도 빨라지는 디버깅·속도상의 이점이 있습니다. 하지만 대부분의 개발자 입장에서는 자바스크립트가 작업하기 더 편리합니다.
3. 동시성(Concurrency)
자바는 여러 스레드를 동시에 실행할 수 있어, 한 번에 여러 작업을 병렬로 처리할 수 있습니다.
자바스크립트는 대신 이벤트 루프(event loop)를 사용하여, 해야 할 작업 스택을 끝까지 순차적으로 처리하는 방식으로 동작합니다. 이 부분에서도 자바가 성능상 우위에 있습니다.
4. 자바는 클래스, 자바스크립트는 프로토타입
앞서 언급했듯이 자바와 자바스크립트는 모두 객체를 사용해 정보를 저장합니다. 또한 둘 다 '상속(inheritance)'을 사용하는데, 이는 객체가 다른 곳에서 속성을 물려받을 수 있게 해주는 기능입니다. 자바에서는 클래스(class)로부터 속성을 상속받습니다. 클래스란 객체를 만드는 방법이 적힌 일종의 설계도입니다. 반면 자바스크립트에서는 새 객체를 프로토타입(prototype), 즉 복사해서 새 객체를 만들 수 있는 객체를 통해 생성합니다.
기본적으로 자바스크립트에서는 모든 객체가 프로토타입이 될 수 있는 반면, 자바는 객체를 생성할 수 있는 클래스를 먼저 만들어야 합니다. 앞선 예를 들자면, 자바는 고양이를 만드는 방법이 담긴 설계도를 제공하는 반면, 자바스크립트는 기존 고양이를 그대로 복제하는 방식입니다.
그렇다면 나에게 필요한 언어는?
기술적인 내용 때문에 눈이 흐려졌다면, 이제 다시 집중해도 좋습니다! 자바와 자바스크립트 중 무엇을 선택할지는 생각보다 어렵지 않습니다.
일반적으로 자바스크립트가 적합한 경우는 다음과 같습니다.
- 웹사이트, 웹 앱 및 기타 프론트엔드 인터페이스
- 간단한 웹 서버/백엔드 작업(Node.js 활용)
- 브라우저 기반 게임 및 애니메이션 제작
- Electron 등 크로스 플랫폼 프레임워크 기반 앱/게임/프로그램
반면 자바가 적합한 경우는 다음과 같습니다.
- 안드로이드 앱
- 데스크톱 애플리케이션
- 서버 사이드 애플리케이션
- 휴대폰, IoT 기기 등 하드웨어용 코드 작성
학습할 언어를 선택하는 것은 목표에 따라 달라집니다. 프로그래밍 커리어를 쌓고 프로그래밍 기초를 탄탄히 다지고 싶거나, 웹이 아닌 애플리케이션 개발을 원한다면 자바가 기술적으로 더 엄격한 언어로 평가받습니다. 자바는 세계에서 가장 널리 사용되는 언어이기도 합니다.
하지만 웹 개발에 뛰어들고 싶거나 주로 웹사이트와 웹 앱 작업을 계획하고 있다면, 자바스크립트는 필수 스킬입니다. 장기적으로는 두 언어를 모두 배우는 것이 좋습니다. 두 언어 모두 여러분을 더 뛰어난(그리고 더 시장 가치가 높은!) 프로그래머로 성장시켜 줄 개념들을 담고 있기 때문입니다.
게임 개발에 도전하고 싶다면, 이 프로그래밍 언어들이 더 적합할 수 있습니다.