북스터디를 하면 개인프로젝트 없이 바로 팀프로젝트로 들어간다는 점에서 개인프로젝트를 선택할지, 북스터디를 진행할지 굉장히 고민이 많았다. 일주일정도의 오랜 고민끝에 나는 북스터디를 선택했다. 북스터디를 선택한 몇가지 이유를 설명하자면
- 이미 이전에 개인프로젝트를 진행 했었다. (지금와서 그때 코드를 보니 리팩토링이 시급)
- React도 결국 JS 기반이다.
- JS에 대해 깊이 있는 공부를 할 수 있어 면접 대비에 유리하다.
- 코딩테스트 대비에 도움이 될것이라 생각했다.
- 책의 저자님이 직접 모르는 부분에 대해서 설명해 주신다.
이렇게 5가지 정도였다. 북스터디 말고 개인프로젝트를 진행했다면 코드리뷰를 받으면서 프로젝트의 퀄리티를 끌어 올릴 수 있었겠지만, 그것보단 북스터디를 했을때의 장점이 조금 더 많다고 느껴졌다.
코딩테스트를 풀면서 어느정도 JS에 대해서 알고 있다고 생각했었다. 하지만 북스터디를 시작하고 책을 읽으면서 나는 JS에 대해서 정말 앝게 알고 있었다는걸 느꼈다. 내가 분명 알고 있다고 생각했던 개념도 면접이라 생각하고 말로 설명하려고 하니 목에서 턱 걸려 제대로 설명하지 못하는 일이 많았다.
여기서 잠시 북스터디의 방식에 대해서 설명하자면 3시간씩 일주일에 2번을 진행한다. 3시간중 1시간 30분은 미리 짜여진 조원들 끼리 모여 읽어온 책의 내용을 바탕으로 랜덤으로 서로를 지목하여 질문을 던진다. 예를들면 "스코프체인과 프로토타입체인의 차이점을 설명해 주시겠어요?" 라고 물어보면 책을 최대한 보지 않고 본인이 이해한 선에서 면접을 보듯이 대답을 하면된다. 대답하기 어렵다면 다른 사람한테 바톤을 넘겨도 좋다. 이렇게 1시간 30분동안 브레인스토밍을 진행하며 토의하고 남은 1시간 30분동안은 브레인스토밍을 해도 이해가 가지 않는 부분을 강사님(책의 저자)께 질문을 하고 답변을 받는다.
책을 읽고 공부한 내용중에 몇가지를 간단하게 정리해 보았다. 배운 내용을 종합적으로 정리하는 글은 따로 작성하는게 좋을것 같아 이번 1주차 회고글 에서는 3가지 정도만 뽑아서 간단하게 정리해 보려고 한다.
함수 선언문은 이름을 생략할 수 없어 기명함수라고도 하며 문이기 때문에 변수에 할당할 수 없다. 표현식이 아니기 때문에(즉, 값으로 평가될 수 없기 때문) 피 연산자가 될 수 없다.
반면, 함수 리터럴은 이름을 생략할 수 있어서 익명함수라고도 하며, 이는 표현식으로써 값으로 평가될 수 있다. 즉 피연산자가 될 수 있고 변수에 할당할 수 있다.
var f = function name(){} // <- 변수에 할당
1번에 의하면 선언문은 값으로 평가될 수 없기에 피 연산자가 될 수 없지만 위의 코드가 가능한 이유는 자바스크립트에서는 코드문맥에 따라서 함수를 선언문 혹은 함수 리터럴로 다르게 해석하기 때문이다.
var a = 1 //선언과 할당을 동시에 함 (변수 정의)
var a; //<- 변수 선언문
a=1 //<- 변수 할당
var b; //<- 변수 선언문
function name(){} //<- 함수 선언문
b = function name(){} // <- 변수에 할당
호이스팅이란 런타임 이전에 변수와 함수 "선언문"을 따로 모아 런타임 이전에 먼저 평가하는것, 따라서 런타임 이전 먼저 실행된 선언문들이 마치 코드 맨 윗줄에 있는것 처럼 동작하는걸 말한다.
자바스크립트는 렉시컬 스코프를 사용한다.
함수를 어디서 호출했냐가 기준이 아니고 어디서 "정의" 했는지가 스코프를 설정하는 기준이다.
함수가 객체로 생성되면 실행위치에 상관없이 정의된 위치를 기준으로 함수 스코프가 정적으로 결정되고 그걸 기억하고 있다.