목록✏️ 2022. TIL/July (31)
Daehyunii's Dev-blog
오늘은 클래스에 대해서 배웠다. 클래스에 대해서는 파이썬에서 한 번 골머리를 앓으면서 공부해서 그런지, 아니면 자바스크립트의 생성자 함수를 배워서 그런지 생각보다 가볍게 느껴졌다. 우선 자바스크립트의 클래스는 인스턴스의 프로퍼티를 생성하기 위한 방법이나, 프로토타입 메서드, 정적 메서드를 표현하는 방식의 차이 외에는 거의 생성자 함수와 비슷하다고 느꼈다. 사실 클래스도 함수 객체이고, constructor인 생성자 함수니 당연한 말일 수 있겠다. 클래스와 생성자 함수의 가장 큰 차이점이 하나 있다면, 생성자 함수는 프로토타입을 기반으로 상속관계가 이루어 진다면, 클래스는 기존 클래스를 상속받아 새로운 클래스를 확장하여 정의하는 방식으로 상속관계가 이뤄진다는 것이다. 그런데 여기서 한 가지 의문점은 자바스..
오늘 공부한 내용은 클로저이다. 클로저는 외부 함수보다 생명주기가 길며 외부 함수의 식별자를 참조하는 중첩 함수를 말한다. 비록 외부 함수의 생명 주기가 종료되어 외부 함수의 실행 컨텍스트는 제거 되었을지라도, 외부 함수의 렉시컬 환경은 별도의 객체로 중첩 함수의 [[Environment]] 내부 슬롯이 기억을 하고 있으며, 중첩 함수 호출시 생성되는 중첩 함수의 함수 실행 컨텍스트의 렉시컬 환경(자세하게는 외부 렉시컬 환경 참조)이 외부 함수의 렉시컬 환경을 참조하고 있다. 이는 자바스크립트 함수는 렉시컬 스코프를 갖기 때문이며, 렉시컬 스코프를 갖는 이유는 자바스크립트의 렉시컬 환경에서 그 이유를 찾을 수 있다. 클로저의 개념을 이해하는데는 큰 어려움은 없었다. 또한 클로저가 가져다 주는 장점 또한 ..
오늘은 자바스크립트의 실행 컨텍스트에 대해 배웠다. 오늘 배운 내용은 여태까지 배웠던 내용들의 전체적인 흐름에 대해서 배울 수 있었다. 앞에 배운 내용들이 자동차의 재료들에 대한 개념을 배웠다면, 오늘은 자동차가 만들어지는 과정에 대해서 배우게 된 것 같다. 실행 컨텍스트를 공부하니 여태까지 배웠던 개념들을 배워야 했던 이유에 대해서 알 수 있게 되었다. 사실상 실행 컨텍스트는 스타그래프트의 일종의 scv라고 생각하면 될 것 같다. 코드의 유형을 분류해서 해당 코드 별로 담당하는 일꾼들을 만들어 내고 정보들을 저장해서 활용하는 구조로 자바스크립트는 실행되고 있었다. 내가 생각하는 자바스크립트의 핵심 개념 두가지를 뽑으라고 한다면, '스코프'와 '프로토타입'이라는 개념이라고 생각한다. 그 중 스코프가 생성..
오늘은 this 키워드에 대해서 배웠다. this 키워드는 자기 참조 변수로서 함수 호출 방식에 의해서 가리키는 것들이 달라진다. 일반 함수로 호출하는 경우에 this는 전역객체 window를 가리키고, 메서드로 함수를 호출하는 경우에는 해당 메서드를 호출한 객체를 가리키며, 생성자 함수로 호출한 경우에는 해당 생성자 함수가 생성할 인스턴스를 가리킨다. 또한 명시적으로 this 바인딩을 할 수 있도록 Function생성자 함수의 프로토타입 메서드를 통해서 함수를 호출하는 apply와 call 메서드, 그리고 호출을 별도로 해야하지만 명시적으로 this 바인딩을 하는 bind 메서드에 대해서 배웠다. this 키워드는 처음 학습하는데는 어려움을 겪을지 몰라도 제대로 이해하고 활용하는 능력까지 갖춘다면, 굉..
오늘은 빌트인 객체에 대해서 배웠다. 빌트인 객체는 전역 객체의 프로퍼티이며, 앞에서 여태까지 배웠던 빌트인 생성자 함수들이 대부분이라는 것도 배웠다. 오늘 배운 내용은 자바스크립트의 큰 틀을 이해하는데 많은 도움이 되었다. 결국 모든 것은 객체라는 사실도 알 수 있었다. 전역 객체는 최종 보스라고 생각하면 될 것 같다. 전역 객체도 객체 이므로 그 안에 프로퍼티와 메서드를 가질 수 있고 전역 객체 내의 프로퍼티와 메서드는 대부분 생성자 함수들이며, 생성자 함수를 통해 객체를 만들 수 있고 생성자 함수를 통해 만들어진 객체의 프로토타입이 생성자 함수의 prototype 프로퍼티가 가리키는 객체이며, 또한 생성자 함수도 객체이므로 자체적인 정적 프로퍼티/메서드를 가질 수 있다는 것이다. 결국 모든 것이 꼬..
오늘 공부한 내용은 strict mode 즉, 엄격 모드를 배웠다. 짧은 내용이었고, strict mode 를 파이썬에서도 배운 개념이고, 개념 정의 그대로 엄격하게 코드를 평가한다는 것이기에 이해하는데 어렵지도 않았다. 그런데 strict mode를 공부하면서 느낀점은 '굳이 이렇게 까지 할 필요가 있을까?' 하는 생각이 들었다. 본 책의 내용을 보면 'strict mode를 전역에서 사용하는것은 피하라', 'strict mode를 함수 단위로 적용하는 것도 피하라' 라고 설명하고 있고, '사용할때는 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 바람직하다.' 설명하고 있는데 그렇다면 오히려 strict mode를 사용했을때 전체적인 코드 가독성은 떨어트리는 것이 아닌가 하는 생각이 많이 들었다..
오늘은 프로토타입에 대해서 공부했다. 프로토타입을 이해하는데 정말 힘들었다. 일단, 책을 읽는 것부터가 많이 힘들었던 것 같다. 프로토타입 관련 내용들도 적지 않았기에 책을 읽을때 조금만 집중을 느슨하게 하면 무슨 뜻인지 이해할 수 없을 정도로 헷갈렸다. 우선 가장 집중했던 것은 단어 하나하나의 온전한 뜻에 집중해서 책을 읽었고, 그 결과 어느정도 성공적으로 프로토타입을 정리할 수 있었다. 앞에서 계속 공부하면서 간혹 등장했던 문장 중 하나는 '자바스크립트는 프로토타입 기반 객체지향 프로그래밍 언어'라는 문장을 접할 수 있었는데, 그 당시만 해도 그게 무슨 뜻인지 전혀 알지도 못했으나, 프로토타입을 공부하면서 객체지향 프로그래밍이 무엇인지 어느정도 알 수 있었다. 우선 객체는 속성을 가진다. 그러한 속성..
오늘은 함수에 대해서 자세하게 공부하였다. 함수는 정말 많은 기능을 한다. 함수는 일급 객체이고, 일반 함수로 호출하거나, 생성자 함수로 호출하여 객체를 생성할 수도 있다. 함수는 객체이기 때문에 변수, 자료구조에 저장할 수 있으며 함수를 함수의 매개변수로 전달하거나 함수를 함수의 반환값으로 사용할 수도 있다. 이러한 의미에서 일급 객체라는 표현은 참 잘 지어진 개념인것 같다. 또한 함수도 객체이기에 프로퍼티를 갖는 다는 사실을 알게 되어서 개인적으로 참 기분이 좋았다. 왜냐하면 함수가 객체라는 사실은 알고 있었지만, 객체는 프로퍼티를 가진다는데 여태까지 함수코드를 작성할때는 프로퍼티를 확인할 수 없었기 때문에 많은 혼란을 겪었기 때문이다. 하지만 오늘부로 자바스크립트에서 함수는 객체이고, 함수는 arg..