21년 08월 02일의 소회
오늘 수강해야 할 강의는 총 12개였는데 일단 앞부분을 들으면서 기본기를 다시 다져주네 다시 들으니 새록새록하고 좋군 하며 그래도 조금 심화된 내용이라 더 배워가고 좋네?! 하고 있었는데.. 더보기
갑자기 암호화 네트워크 컴퓨터 시간 같은 것들이 내 뇌는 너무 작고 작은데 갑자기?! 별안간 일단 다 모르지만 다 쑤셔넣어보았습니다. 오늘 배운 걸 도대체 어디서부터 어떻게 정리를 해야 할지 너무나 심난하고 그래서 오늘은 일단 쑤셔넣어야 할 것들을 전체적으로 정리를 좀 해두고 나중에 보려고 합니다.
오늘은 TIL이 아니라 TILTMT라고 써야될 것 같네요.
*TODAY I LEARNED TOO MANY THINGS
브라우저의 역사
최초의 웹 브라우저는 넷스케이프사에서 개발한 네비게이터로 당시 웹브라우저 업계를 평정했다.
1955년 당시, 브라우저란 HTML로만 이루어진 아주 정적인 문서 수준이었다. HTML은 언어 자체에서 수학적 계산이 불가하기 때문에 프로그래밍 언어가 아니라는 말이 있듯 당시에도 브라우저에 스킴이라는 언어를 내장해달라는 요구가 있었다. 하지만 브랜든 아이크는 이와 달리 아예 새 언어를 만들었고 그게 바로 현재의 웹 개발 언어인 자바스크립트가 되었다.
브라우저의 동작 원리
ES6란 무엇인가? 그리고 let과 var
사실 오늘 ES6란 말 처음 들어봤읍니다. 맨날 강의 들을 때도 어떤 강의에서는 변수 선언할 때 let을 쓰라고 하고 어디서는 var를 쓰고 있고 근데 되도록이면 var는 지양하라고 하고. 그게 도대체 왜 그런 건지 도무지 이해를 못 하고 있었는데 오늘에서야 알게 되었다. 물론 몰라도 괜찮아요, 모른다는 사실을 알면 이제 배울 수 있으니 아주 다행인 일이니까요?! 전 그렇게 생각합니다.
웹, 스크립트 언어들에 대한 표준 규격이라고 할 수 있는ES(ECMAScript)라는 게 있고 뒤에 붙는 숫자는 그에 따른 버전이라고 할 수 있는데 ES6 이전에는 변수를 선언할 수 있는 방법이 함수 수준의 스코프를 갖는 var밖에 없어 이로 인한 *호이스팅 문제가 발생하였다.
*(참고) JS 유효 범위와 호이스팅 문제
*MDN 문서 : WindowTimers.setTimeout()
그러나 ES6 이후 let이라는 키워드가 등장하게 되었고 let은 블록 수준의 스코프를 가지므로 호이스팅 문제를 발생시키지 않아 ES6을 사용 가능한 환경에서는 재할당 가능성이 있는 보통의 변수를 선언할 때는 let을 사용하고 재할당 하지 않을 상수에는 const를 사용하는 것을 권장한다.
GARBAGE COLLECTION, gc()
C언어 같은 원초적인 언어 수준에서는 메모리 할당과 해제를 malloc(), free()같은 함수를 사용하여 모두 수동적으로 해줘야했기 때문에 메모리 사용에 대한 불편함이 있었다.
그러나 JS에서는 객체가 생성되었을 때 메모리를 자동으로 할당하고 해당 객체의 쓸모가 없어지면 자동으로 메모리 할당을 해제하는 자동 메모리 관리 방식의 가비지 컬렉션을 사용하고 있기 때문에 수동적인 메모리 관리를 하지 않아도 된다는 편리함이 있다.
(과연 그렇기만 할까?)
현재의 가비지 컬렉션은 MARK AND SWEEP이라는 알고리즘을 통해 메모리를 정리하는데 WINDOW(혹은 ROOT)로부터 가지를 뻗어나가 참조되고 있지 않은 메모리의 할당을 해제한다.
*(참고) 가비지 컬렉터(Garbage Collector)와 Mark & Sweep
JS의 메모리
이 부분은 내일 다시 좀 더 공부해보고 추가 하겠다.
JS 연산자의 종류
흐름 제어 문법
__
시간이 너무 늦었으므로.. 모든 건 내일 아침의 나에게 맡깁니다. 매일 아침 중국어 선생님이 절 기다리고 계세요 😢