JS에만 있는 개념인 Prototype을 배우고, Static에 대해서 다시 배웠다. Static은 객체로 호출하는게 아니라 Class 자체에서 호출한다는것은 처음 안 것 같다. 상속에 대해서 다시 한번 상기하고, 변수 호이스팅과 함수 호이스팅에 대해서 좀 더 이해하게 되는 수업이였다. 그리고 실행컨텍스트, 렉시컬환경, 환경레코드, 스코프체인 등 서로 동떨어져만 있고 어려웠던 개념들을 서로 다 연결되어있도록 그림으로 공부하여 어느정도 이해할 수 있게 되었다. Closure 개념도 더 코드로 봐도 와닿게 공부했고 각 상황에 따라 동적으로 this가 binding되는 경우도 여럿 공부했다. 그리고 arrow function과 일반 함수의 차이에 대해서도 다시 공부했다.
.Prototype vs proto 이게 너무 어렵다. 이 부분은 따로 내가 공부를 해봐야겠다. 그리고 실행컨텍스트와 클로저 개념은 어제 공부할때보다는 훨씬 많이 배웠지만 아직도 부족한 것 같다. this binding은 어느정도 이해가 됐지만 내가 자유자재로 binding을 하려면 어려울것 같다.
현업에서 어제 오늘 배운 이 심화 개념들을 자주 사용할까? 아니면 이 개념들을 알아야만 나중에 버그를 잡거나 기능을 개발할때 도움이 될 수 있기 때문에 배우는걸까?
나는 지금까지 자바스크립트라는 프로그래밍 언어 자체를 얕본게 아닌가 싶다. Managed Language인 C와 C++을 배웠다고 프론트엔드에서 쉽게 접할 수 있는 JS를 너무 얕본것 같다. 지금 신나게 혼나고 있다. JS 심화 영역으로 넘어가니까 프로토타입, 실행컨텍스트, 클로저, this 바인딩, 호이스팅 등 이런 개념들이 꽤나 추상적이고 어렵다. 나중에 구글링과 더 나아가 책을 통해서 이러한 심화 내용을 공부해야겠다. 물론 지금 프로젝트를 만들면서 이러한 개념을 넣는다는것은 무리가 있겠지만, 그래도 이런 심화내용을 공부함으로써 나중에 혼자 공부할때나 구글링할때 이러한 개념을 알고있으니 새로운 개념을 배울때 구조적으로 더 잘 이해하게 될것이고, 나중에 면접 같은것을 할 때 직접적으로 도움이 될것은 확실해 보인다.