es6 디스트럭처링과 클래스 상속

디스트럭처링

배열의 요소나 객체의 속성을 배열 리터럴이나 객체 리터럴과 비슷한 문법을 이용해서 변수에 할당할 수 있다.

객체 복사

  • Object.assign을 주로 쓴다
  • JSON.stringify(?) 꼼수.

Object.assign

  • static 메서드
  • 가변인자함수(매개변수가 여러개 올 수 있음)
  • ({}, 매개변수1, 매개변수2…)
    {}로 복사본을 만들 수 있음,
    매개변수1에 매개변수2…가 merge됨

배열 디스트럭처링

  • 배열의 요소를 추출해서 변수리스트에 할당한다.
  • 추출/할당의 기준은 index
  • [x, …y] = [1,2,3,4]; spread 연산자는 매개변수의 마지막에 올 수 있고, 그런 경우에sms 할당된 요소의 남은 갯수만큼의 배열이 생성된다. result => y = [2 ,3 ,4];

객체 디스트럭처링

  • 프로퍼티 이름(키)이 같은 것을 가져온다.
  • todo.filter(({completed})) => {…})
  • forEach(({id, content, completed}) => {…})
  • 위처럼 객체 디스트럭처링을 하며 ${todo.id} -> ${id}로 사용할 수 있다.
  • const { … } 형태
  • 참고) _변수명 : 내부에서만 쓰는 변수(private), 외부에서 참조할 수 없음, 문법x

클래스

  • ES6 class는 접근 제한자를 지원하지 않는다.
  • constructor와 메서드만 올 수 있다.
  • 프로퍼티는 constructor 내부에 선언할 수 있다.
  • 메소드 내부에서 프로퍼티를 접근할 때는 this를 사용한다.
  • 내부에서는 클래스가 Function(생성자)이다.

멤버변수

  • 값을 함수로 가지고 있는 변수 -> 메소드 -> “멤버변수”
  • constructor 내부에서만 선언할 수 있다.( this.name = name, 반드시 this 사용)
  • 즉, constructor의 지역 변수
  • pubilic, 외부에서 접근할 수 있다.

클래스의 호이스팅

  • let, const와 같다.
  • 선언문 이전에 호출하면 에러
    예) const foo = new Foo(); //Reference Error

getter, setter

  • get(set) 메서드(){…}
  • getter는 프로퍼티처럼 쓴다.
  • get firstElem(){return…}
  • console.log(foo.firstElem);
  • setter는 return이 없고 값을 할당한다.

클래스 상속

  • super :부모클래스의 contsructor 호출 (상속받을 constructor)
  • 인자가 있다. 현재 클래스에 없는 변수(아마 부모 클래스의 멤버변수일 듯)를 상속받을 때 해당변수를 인자로 써준다.
  • super 호출이 없으면 this가 없다.

모듈

  • 관련성이 있는 것들을 모아둔 파일이 분리된 형태
  • html에서 <script src=''>로 js파일을 불러들이는 경우, 파일마다 독립적인 scope가 없고, 전역(window)이 하나이다.
  • npm
  • 파일이 분리된 모듈 형태로 쓰려면 webpack을 사용해야 한다.
  • ES6 모듈은 export,import 키워드를 지원하지만, 모든 브라우저에서 지원하지 않는다.
  • export,import 키워드만 지정, 표준x, 스펙이 없어서 쓸 수 없다.

에러 처리의 한계 (비동기) -> Promise

  • 비동기 함수에선 error가 catch 되지 않는다.
  • Promise를 사용하여 에러 처리의 한계 극복