Untitled
1. 자바스크립트는 변하지 않는 기술이며, 이러한 프로그래밍 언어를 비롯한 근본 기술에 대한 학습이 정말 중요하다. 왜냐하면 우리는 앞으로 몇 십년 동안 자바스크립트로 코딩을 할 것이기 때문이다. 하지만 리액트, 넥스트와 같은 프레임워크는 언제 교체될 지 모른다. 자바스크립트는 서버로 확장되며 가능성이 더욱 커지고 있다. 2. 자바스크립트는 당시 유행하던 자바 + 가벼운 프로그램을 의미하는 스크립트를 합친 이름이다. 3. TC39는 JS를 관리하는 기술 위원회로, JS의 공식 명세를 관리한다. 명세 변경 안건을 투표하고 합의된 변경사항을 국제 표준화 기구인 ECMA에 제출한다. 4. JS는 하위 호환성을, HTML과 CSS는 상위 호환성을 보장한다. 다시말해 JS는 명세서가 변경되더라도 이전의 유효하던 코드가 깨지지 않지만 HTML과 CSS는 깨질 수 있다. 5. 자바스크립트는 컴파일 언어이다. JS엔진은 JS코드를 파싱해 AST로 변환하고 이를 바이트 코드로 변환다. 이 과정에서 JIT컴파일러가 작동하며 최적화가 함께 진행된다. 그리고 JS가상머신이 프로그램을 실행한다. 6. 웹 어셈블리는 브라우저에서 실행하는 프로그래밍 언어로 Java, C#등과 같은 바이트코드 언어이다. JS의 싱글 스레드라는 단점을 보완한 GO같이 멀티 스레드 기반 언어, 컴파일링을 미리 수행하는 C언어 등 JS외의 언어도 브라우저에서 동작할 수 있는 확장을 한다. 7. 코드 구조화 패턴에는 클래스와 모듈이 있다. 클래스는 데이터와 동작을 한 곳에 묶어 구조화하는 것이다. 모듈에는 클래식 모듈과 ES모듈이 있으며, 클래식 모듈은 클로저를 활용하여 외부 함수가 반환하는 변수 및 함수는 public, 그 외 내부 변수는 private이 된다. ES모듈은 각 파일이 모듈이며 스코프이다. export를 통해 public으로 바꿀 수 있다. 8. 이터레이터 패턴은 수십 년 동안 사용되어 온 디자인 패턴으로, 반복 작업으로 데이터를 처리할 때 표준화된 방법을 사용해 처리할 수 있도록 한다. 9. 클로저는 함수가 정의된 스코프가 아닌 다른 스코프에서 함수가 실행되더라도, 스코프 밖에 있는 변수를 기억하고 그 외부 변수에 계속 접근할 수 있는 경우를 말한다. 10. 스코프는 JS를 컴파일하는 과정에서 결정이 되며 런타임 환경에는 영향을 받지 않는다. 이를 렉시컬 스코프라 한다. 그리고 컴파일 과정에서 스코프와 스코프에 존재하는 식별자를 연결한다. 그리고 인터프리터(JS가상머신)가 함수를 실행할 때 렉시컬 환경이 만들어지며, 내부 environment record에 해당 함수 스코프의 식별자들이 저장되는 것이다. 11. 웹 워커는 브라우저에서 돌아가는 JS의 작동 방식을 바꿔주는 웹 플랫폼 확장기능으로, JS파일을 JS프로그램이 돌아가고 있는 스레드가 아닌 별도의 스레드에서 돌아갈 수 있게 한다.
JavaScript는 참 배워도 배워도 끝이 없는 거 같다. 특히 책 초반의 TC39, ECMA와 같이 예전에 블로그 글을 통해 얕게 공부했던 내용들을 명확하게 알려주어 좋았다. 뿐만 아니라 웹 어셈블리, 웹 워커와 같이 평소 들어보기만 했던 내용들을 자세히 다루어주어 JS의 가능성과 확장성에 대해 더 깊이 이해할 수 있었다. 마지막으로 책에서 배운 내용을 중간에 예제에서 그대로 작성해보니 ‘이렇게 작성하는구나’ 익힐 수 있었다. 이제는 JavaScript와 조금은 친하다고 할 수 있지 않을까. + 책에서 배운 내용에서 더 나아가, 책에서 아직 헷갈리는 부분, 더 공부하고 싶은 부분이 있으면 즉시 찾아보고 이를 또한 기록했다. 더 확실하게 이해가 갔고, 주변 지식을 학습할 수 있어 너무 좋았다. 앞으로도 이 ‘추가 학습’을 애용하고자 한다.
Untitled