JavaScript

[개념정리]자바스크립트와 ECMAScript 무엇이 다를까? [feat. 빌트인(built in) 객체]

건강한_개발자 2023. 11. 28. 22:59

0. 서론

자바스크립트 공부를 하던중, "빌트인 객체" 라는 개념에 꽃혀 공부를 하다가 정리할 좋은 기회가 생겨 정리를 마음먹고 바로 글을 쓰게 되었다. 

오늘은 조금 헷갈리던 개념인, 
1. 자바스크립트와 ECMAScript 의 차이점
2. 자바스크립트의 객체 [빌트인 객체와 빌트인이 아닌 객체]
에 대해 정리를 해보겠다. 

정말 누가봐도 쉽게 이해할 수 있도록 글을 작성하려고 노력했지만, 혹시 이해가 안간다면 댓글을 달면 이해시켜주겠다.

 

 

1. 자바스크립트 실행 환경

 

 

자바스크립트 실행환경은 다음 그림과 같다.

 

이번 글의 핵심은 자바스크립트의 실행환경이 아니고, 자바스크립트와 ECMAScript가 무엇이 다른지에 대해 적어보려고 한다.

 

 

바로 핵심 글로 넘어가보겠다.

 

 

2. 자바스크립트와 ECMAScript

 

2-1. ECMAScript란?

[정의]
ECMAScript는 자바스크립트의 표준 사양인 ECMA-262를 말하며, 프로그래밍 언어의 값, 타입, 객체와 프로퍼티, 함수, 표준 빌트인 객체(standard built-in object)등 핵심 문법을 규정한다.

[추가설명]
각 브라우저 제조사는 ECMAScript 사양을 준수해서 브라우저에 내장되는 자바스크립트 엔진을 구현한다.

 

2-2. JavaScript란?

[정의]
자바스크립트는 일반적으로 프로그래밍 언어로서 기본 뼈대를 이루는 ECMAScript와 브라우저가 별도 지원하는 클라이언트 사이드 Web API, 즉 DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker 등을 아우르는 개념이다.

[추가설명]
클라이언트 사이드 Web API는 ECMAScript와는 별도로 W3C(World Web Consortium)에서 별도의 사양으로 관리하고 있다.

 

 

 

3. 결론 [ ECMAScript 와 JavaScript 에 관한]

위 그림과 같이, ECMASCript는 JavaScript의 부분집합 관계라고 볼 수 있다.
조금 더 쉽게 말하면, ECMAScript는 JavaScript에 포함되어 있는 개념이고, 그 반대는 성립되지 않는다.

 

 

+연관된 추가 공부 [ 자바스크립트 객체의 분류]

자바스크립트의 객체는 크게 3가지로 객체로 분류할 수 있다.

표준 빌트인 객체 호스트 객체 사용자 정의 객체
ECMAScript 사양에 정의된 객체 ECMAScript 사양에 정의 X
자바스크립트 실행 환경
(브라우저 또는Node.js 환경)
에서 추가적 제공하는 객체
기본 제공 객체가 아닌
사용자가 직접 정의한 객체
전역 객체의 프로퍼티로서 제공된다. 브라우저 - 클라이언트사이드 Web API 제공
Node.js - Node.js고유 API 제공
 
빌트인 객체 빌트인 객체 빌트인 객체가 아니다.

 

+4-1. built in (빌트인) 이란 용어에 관하여

위에서 분류한 세가지 객체의 종류중 
표준 빌트인 객체와 호스트 객체는 빌트인 객체이고, 
사용자 정의 객체는 빌트인 객체가 아니다.

빌트인이란 용어를 주변에서 찾아보면, 우리가 사는 집을 구할때 들어볼 수 있다. 
예를들어, 집을 알아보던 중, 그 집에 에어컨이 있다면, 빌트인 이라고 볼 수 있다.
하지만 만약 세탁기가 없다면, 빌트인이 아니고, 직접 구매해야 한다.

이러한 관점을 가지고 자바스크립트를 알아보면, 
빌트인이란 기본적으로 내장되어 있는, 기본 제공되는 객체이기 때문에 built in 을 번역시 내장된 이라는 의미로 내장된 객체이다.
따라서 브라우저에서는 표준 빌트인 객체와 호스트 객체는 빌트인 객체로 볼 수 있고,
사용자 정의 객체는 빌트인 객체가 아니라고 볼 수 있다.

 

 

 

5. 마무리

ECMAScript 와 JavaScript 의 차이점을 몰라도 사실 개발하는데 큰 문제가 있을것 같지는 않다고 생각한다.
하지만 안다고 손해볼건 없다. 
글을 정리해보니, 더 확실히 기억에 남을 것 같다.