4.1 첫 번째 기둥: 스코프와 클로저
렉시컬 스코프 모델 : 스코프의 기준과 그 경계, 경계 안에서 변수가 어떻게 구성되는지 프로그램을 파싱할때 결정되는 모델. (= 개발자가 스코프를 어디에 배치하냐에 따라 달라지는 모델)
JS는 렉시컬 스코프 모델을 채택하고 있지만, 여타 언어와 다른 두 가지 특징을 더 갖는다
- 호이스팅
- var 로 선언한 변수는 블록이 아닌 함수 기준으로 스코프가 만들어진다는 점
이 두가지 특징이 있지만 JS는 렉시컬 스코프 모델을 사용한다고 할수 있다. 클로저 또한 JS가 함수를 일급객체로 다루는 렉시컬 스코프 모델이기에 자연스레 나온 결과이다.
4.2 두 번째 기둥: 프로토타입
JS는 클래스를 통해 사전에 구조를 정의하지 않아도 직접적이고 명시적으로 객체를 만들 수 있는 몇 안되는 언어 중 하나이다.
프로토타입을 사용해 프로토타입 상속이라 불리는 클래스 디자인 패턴을 사용하던 것과 달리, ES6에서는 class
키워드를 통한 JS를 객체지향/클래스 스타일로 개발하자는 움직임이 생겼다.
하지만 프로토타입을 사용하면 this 컨텍스트가 공유되면서 두 객체를 아주 간편하게 연결할 수 있고, 함수나 메서드가 실행되는 동안 두 객체를 동적으로 협력하게 할 수 있다. 이렇게 클래스 없이 프로토타입 체인으로 객체가 협력하게 하는 방식을 작동 위임(behavior delegation)
이라고 한다
이렇게 클래스를 사용하지 않고도 객체만으로도 강력한 패턴을 만들 수 있다.
4.3 세 번째 기둥: 타입과 타입 강제 변환
최근에는 타입스크립트와 같은 정적 타입 개발을 많이 하지만, JS 에서의 타입과 타입 변환이 어떻게 이뤄지는지도 알아야한다. JS의 본질을 잘 따른다면 정적 타입 도구 없이도 목표한 바를 이룰 수 있다. (자세한 내용은 YDKJSY 4권을 참조하라고 되어있음)
4.4 JS의 본질 따르기
이 책 YDKJSY 은 일반적으로 널린 알려진 방식과는 다른 방식을 주장한다. 하지만 이 책에는 명세서를 토대로 가능한 한 사실인 정보를 담았다. 따라서 사실인 정보는 그대로 받아들이되, 필자의 의견인 내용은 잘 생각하고 자신만의 결론에 도달해야한다.
다만 JS의 본질은 따라야한다. 언어 차원에서 JS가 어떻게 돌아가는지 이해해야 잘 동작하는 부분이 있기 때문이다. 따라서 먼저 JS 고유의 방식을 배우고 습득해야한다. JS에는 이미 성공한 수많은 패턴과 관용구가 있는데 이를 따르는 것이 최선이다.
물론 이 책을 읽고 프로젝트를 한번에 바꾸려고는 하지마라. 팀원들과 공감대를 형성하고 조금씩 바꿔야한다.
마지막으로 JS를 학습할때는 가독성 향상에 도움을 주는 방식이 있는지 항상 탐구하라.