본문 바로가기
JS/JS 공부는 다다익선 [모던자바스크립트]

JS 공부는 다다익선 - 1. 자바스크립트 이해

by spare8433 2023. 9. 19.

1. 자바스크립트의 탄생

1995년 당시 넷스케이프 커뮤니케이션즈가 정적인 HTML을 동적으로 표현하기 위해 경량의 프로그래밍 언어를 만들기 위해 브렌던 아이크(Brendan Eich)가 자바스크립트를 개발했다.



2. 자바스크립트의 파편화와 표준화

1996년 8월, 마이크로소프트는 자바스크립트의 파생 버전인 "JScript"를 Internet Explorer 3.0에 탑재하였다. 그런데 문제는 JScript와 자바스크립트가 표준화되지 못하고 적당히 호환되었다는 것이다.

 

이후 자사 브라우저에서만 동작하는 기능을 경쟁적으로 추가하기 시작하며 브라우저에 따라 웹 페이지가 정상 동작하지 않는 크로스 브라우징 이슈로 인해 모든 브라우저에서 동작하는 웹 페이지를 개발에 어려움이 생겼다.

 

이에 자바스크립트의 파편화를 방지하고 모든 브라우저에서 동일하게 동작하는 표준화된 자바스크립트에 대한 필요성이 제기되어 1996년 11월, 넷스케이프 커뮤니케이션즈는 컴퓨터 시스템의 표준을 관리하는 비영리 표준화 기구인 ECMA 인터내셔널 에 자바스크립트의 표준화를 요청하였다.

 

표준화된 자바스크립트 초판(ECMAScript 1)의 명세(specification)가 완성되었고 상표권 문제로 자바스크립트는 ECMAScript로 명명되었다. 이후 지속적으로 표준안이 출시되고 있다.



3. JavaScript와 ECMAScript

ECMAScript는 자바스크립트의 표준 명세인 ECMA-262를 말하며 프로그래밍 언어의 타입, 값, 객체와 프로퍼티, 함수, 빌트인 객체 등 핵심 문법(core syntax)을 규정한다. 각 브라우저 제조사는 ECMAScript를 준수하여 브라우저에 내장되는 자바스크립트 엔진을 구현한다.

 

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

 

W3C: 웹 표준의 공식적인 정의와 표준 개발 프로세스를 제공하는 웹 사이트

MDN: 개발자들이 실제로 JavaScript와 웹 API를 사용하는 방법을 자세히 설명하는 웹 사이트



4. 자바스크립트 특징

자바스크립트는 HTML, CSS와 함께 웹을 구성하는 요소 중 하나로 웹 브라우저에서 동작하는 유일한 프로그래밍 언어이다. 자바스크립트는 기존의 프로그래밍 언어에서 많은 영향을 받았다. 기본 문법은 C, Java와 유사하고 Self에서는 프로토타입 기반 상속을, Scheme에서는 일급 함수의 개념을 차용했다.

 

자바스크립트는 개발자가 별도의 컴파일 작업을 수행하지 않는 인터프리터 언어(Interpreter language) 이다. 대부분의 모던 자바스크립트 엔진(Chrome의 V8, FireFox의 Spidermonkey, Safari의 JavaScriptCore, Microsoft Edge의 Chakra 등)은 인터프리터와 컴파일러의 장점을 결합하여 비교적 처리 속도가 느린 인터프리터의 단점을 해결했다.

 

※ 자바스크립트는 명령형(imperative), 함수형(functional), 프로토타입 기반(prototype-based) 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어다.

 

명령형 프로그래밍(Imperative Programming):

  • 명령형 프로그래밍은 프로그램이 어떻게 어떤 작업을 수행해야 하는지를 상세하게 명시하는 방식입니다.
  • 코드는 명령문의 연속이며, 상태와 상태를 변경하는 명령을 중심으로 동작합니다.
  • 주로 "어떻게" 문제를 해결할 것인지에 집중하며, 프로그램이 각 단계에서 무엇을 수행해야 하는지 명확하게 정의합니다.
  • 대표적인 명령형 프로그래밍 언어로는 C, C++, Java 등이 있습니다.

 

함수형 프로그래밍(Functional Programming):

  • 함수형 프로그래밍은 프로그램을 함수로 조립하고 데이터를 불변하게 다루며, 부작용 없이 순수한 함수를 중심으로 코드를 작성하는 프로그래밍 스타일입니다.
  • 코드의 안정성, 가독성, 유지 보수성을 향상시키며, 병렬 처리와 동시성 문제를 다루기 용이합니다.
  • 대표적인 함수형 프로그래밍 언어로는 Haskell, Lisp, Clojure, Scala 등이 있습니다.

 

프로토타입 기반 프로그래밍(Prototype-based Programming)

  • 프로토타입 기반 프로그래밍은 객체지향 프로그래밍의 한 형태의 갈래로 클래스가 없고, 클래스 기반 언어에서 상속을 사용하는 것과는 다르게, 객체의 프로토타입을 기반으로 객체를 생성하고 상속하는 방식입니다.
  • 프로토타입 기반 프로그래밍은 객체를 동적으로 생성하고 수정할 수 있습니다. 객체의 속성과 메서드는 런타임에 추가, 수정, 삭제할 수 있으며, 이로써 동적인 프로그래밍이 가능해집니다.
  • 프로토타입기반 프로그래밍은 클래스리스(class-less), 프로토타입 지향(prototype-oriented) 혹은 인스턴스 기반(instance-based) 프로그래밍이라고도 한다.



5. Node.js 등장

2008년 등장한 구글의 V8 자바스크립트 엔진은 빠른 성능을 보여 주었다. V8 자바스크립트 엔진의 등장으로 자바스크립트는 데스크톱 애플리케이션과 유사한 사용자 경험(user experience)을 제공할 수 있는 웹 애플리케이션 개발 프로그래밍 언어로 정착하게 되었다.

 

2009년, JS 엔진이 강력해지고 웹 브라우저가 아닌 곳에서 사용할 수 있도록 표준을 만들자는 의견이 많아짐에 따라 CommonJS 표준을 발표되었고 Ryan Dahl 은 브라우저에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서 동작시킬 수 있는 자바스크립트 실행 환경인 Node.js 를 제작했다. 이제 자바스크립트는 웹 브라우저를 벗어나 서버 사이드 애플리케이션 개발에서도 사용되는 범용 프로그래밍 언어가 되었다.



참고


https://poiemaweb.com/js-introduction

https://velog.io/@warmwhiten/Node.js%EC%9D%98-%EC%97%AD%EC%82%AC-%EA%B0%84%EB%8B%A8%ED%95%98%EA%B2%8C-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0