[JS Deep Dive] 1장 - 5장 요약
in JavaScript
01. 프로그래밍이란?
프로그래밍 : 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션.
프로그래밍을 하기 전에 더 선행되어야하는 필요조건은 문제 해결 능력이다. (정확하고 상세하게 요규사항을 컴퓨터에게 전달해야함)
사람이 이해할 수 있는 구문으로 구성된 ‘프로그래밍 언어’를 사용해 프로그램 작성 -> 번역기(컴파일러/인터프리터)를 이용해 프로그램(사람의 언어)을 기계어로 번역
02. 자바스크립트란?
1995년 웹 브라우저 시장을 지배하고 있던 넷스케이프 커뮤니케이션즈는 브라우저에서 동작하는 경량 프로그래밍 언어를 도입하기로 결정
이것이 자바스크립트의 탄생
그런데 마소에서 자바스크립트 파생 버전인 Jscript를 탑재하고난 이후, Jscript와 JavaScript는 서로 완벽히 호환되지 않는 크로싱 브라우저문제가 발생.
그래서 비영리 표준화 기구인 ECMA인터네셔널에 자바스크립트 표준화를 요청함
상표권 문제로 1997년에 ECMAScript로 명명되었고,
우리가 현재 ES6라고 불리우는 ECMAScript6는 2015년에 공개된 버전으로 범용 프로그래밍언어로서 갖춰야할 여러 큰 기능들을 가지고 공개되었기 때문에 가장 큰 변화가 있다고 불리우고 있다(let/const, 화살표 함수, 클래스, 모듈 등등)
Node.js
node.js는 브라우저 이외의 환경에서도 동작할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시킨 자바스크립트 실행 환경이다.
(주로 서버 사이드 애플리케이션 개발에서 주로 이용됨)
Node.js는 비동기 I/O 를 지원하며 단일 스레드 이벤트 루프 기반으로 동작한다.
=> 무슨말이냐 대체 (●・̆⍛・̆●)
찾아봤더니,
- 비동기I/O : I/O(Input/Output 입출력)작업이 진행되는 동안 자신의 일을 하다가 알림이 오면 마무리 되는것을 뜻한다.
- 단일스레드 : 동시에 하나의 작업만을 처리할 수 있는 것 (자바스크립트는 단일스레드이고 node.js는 멀티스레드이다)
- 자바스크립트는 이벤트루프를 이용하여 비동기 방식으로 동시성을 지원한다
자바스크립트는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어이고, 별도의 컴파일 작업을 수행하지 않는 인터프리터 언어이다.
(자바는 실행하게되면 클래스와 실행파일이 만들어지는 컴파일 언어임)
여튼 그래서 자바스크립트는 프로토타입 기반의 객체지향 언어이다.(클래스, 상속 등이 없어서 객체지향 언어가 아니라고 오해받음)
ES6에서 클래스문법이 추가 되었지만, 그렇다고 JS가 클래스기반 객체지향이 되었다는 소리는 아니다.
클래스가 없으니 기본적으로 상속의 기능도 없고고, 그렇기 때문에 프로토타입을 기반으로 상속을 흉내내어 사용한다
04. 변수
변수 : 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 / 그 메모리 공간을 식별하기 위해 붙인 이름
변수 선언 : 값을 저장하기 위한 메모리 공간을 확보, 변수 이름과 확보된 메모리 공간의 주소를 연결하여 값을 저장할 수 있도록 하는 과정
변수 사용을 위해서는 반드시 변수 선언이 필요하다. (이때 var, let, const를 사용한다)
변수가 선언되면 확보된 공간은 비어있을것이라고 생각할 수 있으나 그렇지 않다.
무조건 undefined라는 값이 암묵적으로 할당되어 초기화됨!
만약 선언을 하지 않고 변수를 사용하게 되면 Reference Error
참조에러가 나타난다
변수 선언의 실행 시점과 변수 호이스팅
호이스팅이라는 개념을 알기전에는 이 내용이 좀 헷갈렸는데, 지금은 아니지만, 정리를 위해 한번 다시 기록!
console.log(score); //undefined
var score; //이게 변수 선언문
코드는 순차적으로 실행되니까(=런타임) 위의 코드는 참조 에러가 발생해야할 것 같지만 실상은 그렇지 않다.
이유는 변수선언은 소스코드보다 먼저 실행되기 때문이다.
이 말인즉, 변수 선언이 소스코드의 어디에 있든 상관없이 선언문은 다른 코드보다 먼저 실행된다.
=> 변수 선언문이 코드의 가장 최상단으로 끌어올려진 것처럼 동작하는 특징을 변수 호이스팅
이라고 한다.
대신 값의 할당
은 변수 선언
과는 다르게 런타임에 실행된다.
그러니까 변수가 선언되기만 하면 가장 먼저 실행되지만, 그 변수에 값이 입력되는 순서는 런타임에 따라 정해진다.
- 식별자는 특수문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호를 포함할 수 있다
- 단, 식별자는 특수문자를 제외한 문자. 언더스코어, 달러기호로 시작해야한다. 숫자로 시작하는 것은 허용하지 않는다.
- 예약어는 식별자로 사용할 수 없다.