2주차 WIL

ssongyi·2022년 5월 22일
0

항해99

목록 보기
2/12

JavaScript의 ES란?

ES의 탄생 배경

브라우저 전쟁 시절 개발자들은 몸살을 앓았다.
넷 스케이프 사의 자바스크립트가 부러웠는지 사용자 층을 더 끌어내기 위해 MS의 IE 3에도 JScript라는 이름으로 자바스크립트를 탑재하였다.

하지만 둘의 내용이 매우 달랐는지, 같은 기능을 구현하기 위해 개발자가 해야하는 일들이 더 많아졌다.
날이 가면 갈 수록 사용자를 끌어내기 위해 서로 기능을 넣다보니 Javascript와 JScript는 날이 가면 갈 수록 달라지는 경향을 보였다.

이에 대한 심각성을 파악하고, European Computer Manufacturers Association(ECMA, 현 ECMA International)에서는 이러한 자바스크립트에 대한 표준을 내리게 된다.

또한 ECMA에서는 자바스크립트의 표준만 내리는 게 아니라 다른 표준안도 정하기 때문에 그와 구분하기 위해 숫자를 붙였는데 그것이 '262'다.

ECMA262라고 보인다면 아, 자바스크립트 표준 규격이구나라고 생각하면 될 것 같다.

JS? ES?

자바스크립트는 언어이고, ES는 스펙이다.

IE8에서는 ES3 스펙을 준수한 거고, IE9에서는 ES5 스펙을 준수한 거다.
그럼 우리가 여태까지 알고 있던 자바스크립트를 ES라고 불러야할까?
나도 이 문제에 대해서는 아직도 잘 모르겠다.

지금 내가 말할 뉘앙스대로라면 ES는 자바스크립트의 표준을 세운 언어라는 느낌이고,
그냥 자바스크립트하면 비표준 언어라는 느낌이 많이 드는데 나는 아래와 같이 구분해서 부른다.

  • 자바스크립트

    ES5까지의 내용을 나는 그냥 자바스크립트라고 부른다.
    ES3나 5의 특징을 설명해야할 때는 콕 찝어서 ES3다 뭐다 하고 부르지만,
    그렇지 않은 경우에는 그냥 자바스크립트라고 퉁쳐서 부른다

    또한 많은 사람들이 생각하는 웹 브라우저에서 돌아가는 자바스크립트의 기준은 아래의 범주도 포함하는 것 같다.

    ES + DOM(Document Object Model) + BOM(Browser Object Model)
    DOM은 document.뭐시기~ 요런 애들이고 BOM은 window.머시기~(window를 생략하기도 한다.) 이런 애들이라고 알아두면 될 것 같다.

  • ES

    ES2015(a.k.a ES6)+나 ES3, 5의 특징과 같은 걸 콕 찝어 말할 때 ES라고 부른다.

    왜 ES2015 이상의 내용을 얘기할 때 ES를 쓰냐면 ES5와 ES2015 사이에 너무나 큰 변화가 있었기 때문이다.
    그래서 일반적으로 자바스크립트라고 알고 있는 ES5의 내용으로 사람들이 이해하지 않길 바라는 마음에 ES2015라고 구분해서 부르고 있다.

    또한 위에 자바스크립트에서도 언급 했듯이 ES에는 DOM과 BOM을 포함하지 않는다는 점을 유념해둬야한다.
    즉 ES2015가 되건 2020이 되건 BOM과 DOM의 내용하고는 전혀 관련이 없다는 점을 알아둬야한다.

ES5/ES6 문법 차이

ES5 (2009)

4는 너무 급변하는 내용이 있었던지 거절되고, 그 후에 점진적인 개선을 하고자 5가 나온 것으로 알고있다.

기본적으로 IE9부터 본격적인 지원을 하지만 es5-shim을 사용하면 하위 버전에서도 특정 기능들을 지원해준다.

5부터는 아래와 같은 내용들이 추가되었다.

  • 배열
    배열과 관련해서 새로운 메소드들이 많이 생겼는데 대표적으로
    forEach, map, filter, reduce, some, every와 같은 순환 메소드들이 생겼다.
    이 메소드들은 개발자가 반복 횟수나 조건을 잘못 입력하는 등의 실수를 줄여주는 효과가 있다.

  • 객체
    일단 눈에 띄는 점은 객체의 프로퍼티에 대한 설정을 할 수 있다는 것이다.
    객체를 생성/수정/복사하는 표준 메소드들(Object.create(), Object.defineProperty(), Object.freeze(), Object.assign() 등등)과 getter/setter 등등
    또한 Object.keys 메소드를 쓰면 for in 메소드도 대체할 수 있게 된다.

  • strict 모드
    문법을 좀 더 깐깐하게 체크하는 모드이다.
    물론 이유없이 그러는 게 아니라 좀 더 코드를 안전하게(에러가 안 나게, 미연에 방지하고자) 등장했다.
    특징은 아래 링크를 통해 확인해보자.
    Strict mode - JavaScript | MDN

  • bind() 메소드

    this를 강제로 bind 시켜주는 메소드이다.

  • 실행 컨텍스트 내에 존재하는 Lexical Environment

  • JSON(JavaScript Object Notation)
    과거 통신을 할 때 데이터를 XML 형태로 많이 주고 받았다.
    하지만 JSON이 좀 더 경량화 돼있는지 요새는 JSON이 대세다.
    JSON은 자바스크립트의 객체 리터럴과 생긴 건 유사한데 다음과 같은 차이점이 존재한다.

  1. 키는 무조건 쌍따옴표(“”)로 감싼 문자열이어야한다.
  2. 주석은 사용할 수 없다.
  3. 프로퍼티로 메소드는 불가능하다.
  4. 프로퍼티에서도 메소드의 사용이 불가능하다.
    통신을 위해 Object를 JSON으로 바꾸는 방법은 JSON.stringify(obj)이고, 자바스크립트 코드에서 사용하기 위해 JSON은 Object로 바꾸는 방법은 JSON.parse(json)이다.

ES2015(ES6)

원래는 ES6였는데 사람들이 끝자리인 6과 2016년을 연관짓는 습성 때문에 2016년에 나온 걸로 착각을 해서인지 ES2015로 바꾼 것 같다.
ES6 Harmony라고도 불리우는 것 같다.
ES2015 들어서면서 다음과 같은 문제점들이 해결되었다.

  • 호이스팅이 사라진 것 같은 효과
  • 함수 단위 스코프에서 블록 단위 스코프로 변경
  • this를 동적으로 바인딩하지 않는 애로우 펑션
  • 모듈화 지원
  • 콜백 지옥의 구원자, Promise
    • (ES6) ajax 위주의 promise 실습
    • (ES6) Promise에 파라미터를 넘겨서 사용해보자
  • Default, Rest 파라미터
  • 해체 할당, Spread 연산자
  • 템플릿 리터럴
  • 클래스
    이 외에도 특징은 엄청나게 많아서 사람들이 이 부분에서 많은 장벽을 느끼는 것 같다.
    일단 브라우저(특히 MS 계역)에서 지원해주지 않는 경우가 많아
    바벨이라는 트랜스파일러를 써야하는데 바벨 웹 사이트 REPL에서도 즉시 변환이 가능하다.
    하지만 매번 번거롭게 하기 귀찮으니 바벨을 설치해야하는데…
  • 바벨은 웹 브라우저가 아닌 노드 JS 위에서 돌아가고…
  • 노드 JS에서 바벨을 설치하려면 NPM을 알아야하고…
  • 또 모듈화를 사용하려면 웹팩과 같은 모듈 번들러를 사용해야하고…

이런 다양한 장벽 때문에 사람들이 ES2015를 겁내고 쉽사리 접근하지 못하는 경향도 있는 것 같다.
하지만 공부를 위해서라면 바벨 없이도 크롬에서 돌리면 원활한 공부가 가능하고,
모듈화 부분은 지원하는 브라우저가 없기 때문에 건너 뛰고 공부해야할 것 같다.

0개의 댓글