[06장. 데이터 타입]

</br>

✏️ 데이터 타입 설정의 의의는 두괄식 문장 같다.


  사람은 대화 중 정보를 받아들일 때, 맥락을 통해서 문장을 구분해서 듣게 된다. 그렇기 때문에 빠르게 정보를 이해할 수 있게 돕는 자기소개서나 기획서 등은 두괄식으로 작성하게 된다.

데이터 타입이 존재하고, 이것을 설정되는 이유도 이 맥락과 비슷하다.

컴퓨터는 그 어떤 데이터도 0과 1로 이루어져서 이해한다.

우리가 ‘일’이라고 발음했을 때 어떤 맥락인지 모르면 ‘1’인지 ‘일’인지 모르는 것처럼 컴퓨터는 모든 데이터를 최종적으로는 0과 1로 이해하게 된다.

그러니, 그 0과 1이 무엇을 표현하고 있는지 구분하기 위해서 데이터 타입을 설정하게 된다.

</br>

✏️ 데이터 타입은 메모리 관리를 위해서도 사용된다.


  각각의 데이터는 다른 크기를 갖는다.

우리가 데이터를 컴퓨터에 저장하는건 바구니에 내용물을 담는 것과 비슷하다.

액체를 담는지, 고체를 담는지, 크기는 어떤지에 대해서 모른채로 바구니를 준비하라고 하면 누구라도 실수하게 될 것이다.

컴퓨터에게 어떤 것을 담을지 준비할 수 있도록, 데이터 타입을 설정해주게 된다.

또한 데이터 타입에 따라 할당되는 메모리의 크기도, 불러올 때 검색하는 메모리 주소의 크기도 달라지게 된다.

</br>

✏️ 자바스크립트의 동적 타이핑


  JAVA, C언어와 같이 미리 데이터의 타입을 선언해주는 ‘정적 타입 언어’와는 달리, 자바스크립트는 동적 타이핑 언어이다.

자바스크립트는 맥락을 대략적으로 이해해서, 데이터의 타입을 결정해준다.

이는 자바스크립트가 쉽고 편리한 언어가 될 수 있던 이유 중 하나이다.

다만, 무언가를 유추해서 결정하는건 오해를 만들 수 있다.

굉장히 꼼꼼해야하는 디지털 세상에서, 이런 오해는 종종 문제를 만들 수 있다.

그런 점에서 자바스크립트는 쉽고 유연하지만, 신뢰성은 떨어질 수 있다.

이런 부분을 보완한 것이 Typescript이다.

</br>

✏️ 자바스크립트에서의 숫자 타입


  컴퓨터는 소수점 이하의 숫자를 표현하는 여러 방법이 있다. 컴퓨터는 0과 1로 숫자를 표현하기 때문에, 정수를 표현하는 것은 문제가 없다. 2진법으로 정수는 모두 표현할 수 있다. (할당된 메모리에 따라 표현 가능한 범위는 다르겠지만)

문제는 실수이다. 소수점 이하의 수, 0.5 같은 수를 표현하는 것에는 방법의 차이가 생긴다.

  1. 소수점 이하의 수를 정수로서 계산, 정수 부분과 소수 부분을 합치는 방법

  2. 소수점 이하까지의 실수를 2진법을 통해 표현하려는 방식이 있을 것이다.

1의 방식을 고정 소수점 방식 2의 방식을 부동 소수점 방식이라고 한다.

부동 소수점 방식은 숫자가 정확하지 못한 대신, 고정 소수점보다 많은 수를 표현할 수 있어서 많은 언어들이 부동 소수점 방식을 사용한다.

(실제 숫자와 실제로 표현되는 숫자 간의 차이를 다루는 방법은 28장. Number에서 다룬다.)

또한 이런 숫자를 저장하기 위해서 얼마나 많은 메모리를 할당하는지도 차이가 있을 것이다.

C나 JAVA 같은 경우는 int, long, float, double등을 사용해서 정수, 실수, 숫자의 범위에 따라서 메모리 크기를 나누지만

자바스크립트는 배정밀도 64비트 부동소수점 형식 하나로 모든 숫자 타입을 사용하게 된다.


[08장. 제어문]

</br>

✏️ 패턴화된 명령의 제어


  [01장. 프로그래밍]에서 프로그래머는 문제를 작은 단위로 분해해서 패턴화해야한다고 나왔었다.

제어문은, 이렇게 분해된 코드 블록의 실행 흐름을 제어하는 명령문이 된다.

이러한 제어문은 코드를 간결하게 만들어줄 수 있지만, 진행의 흐름을 제어하기 때문에 가독성이 떨어질 수 있다.

코드블록은 조건에 따라 실행하는 조건문, 코드블록은 반복 실행하는 반복문이 있다.


[02장. 자바스크립트란?]

</br>

✏️ 웹페이지와 자바스크립트


  자바스크립트는 웹페이지와 상호작용 할 수 있도록 만들어진 언어이다.

어떤 기술이 그러하듯, 자바스크립트 만으로는 해결할 수 없는 많은 문제들이 생기게 되었다.

</br>

✏️ 자바스크립트의 보완


  어떤 기술이 그러하듯, 자바스크립트도 자바스크립트 코어 엔진만으로는 할 수 없는 한계에 부딪히게 되었다.

자바스크립트의 싱글 스레드 동작 특성으로 인한 동기적인 처리를 해결하기 위해 Ajax가 등장하였고, DOM을 쉽게 제어할 수 있도록 JQuery가 추가되는 등, 발생되는 문제들을 처리하기 위해서 많은 역사적인 순간들을 거쳐 현재의 자바스크립트가 되었다.

</br>

✏️ 모든 기술의 한계


 앞으로도 현재에 있는 기술들은, 언제든지 대체될 수 있을 것이다. 프로그래밍은 단순히 현재에 머무를 수 있는 지식이 아니다. 더 나은 수단이 나오면 언제든지 가치판단해서 변경해야하는 지식이다.

이를 위해서, 프로그래밍 지식의 역사와 정의 그리고 어떤 문제를 해결하려 했는지를 중심적으로 공부하려고 한다.

언젠가 다시 유연하게 대처해야할 날들을 위해서 말이다.


[04장. 변수]

</br>

✏️ 내가 그의 이름을 불러주기 전에는 그는 다만 하나의 몸짓에 지나지 않았다.


  무언가를 식별하기 위해 단어를 만드는 이유는 무언가를 지칭할 때 매번 구체적으로 묘사해야하면 기억하기 어렵기 때문에, 추상화 시키기 위해서이다.

프로그래밍 언어에서 변수도 유사하게 사용되어진다.

변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 또는 메모리 공간을 식별하기 위해 붙인 이름을 말한다.

바구니에 무언가를 담고 바구니 뚜껑을 닫아버리면 찾기 불편하니까 바구니 뚜껑에 이름표를 붙여서 바구니를 쓰기 편하게 하는 것이다.

</br>

✏️ 변수의 호이스팅


  변수 호이스팅은 한 줄 씩 코드가 실행되는 중, 현재 실행되고 있는 곳보다 나중에 선언되는 변수에 접근할 수 있는 현상을 말한다.

자바스크립트는 코드를 실행하기 전에, 소스코드의 평가를 먼저 진행하게 된다. 변수의 선언문은 이 평가 과정에서 실행되게 된다.

이런 이유로 호이스팅이 발생하게 된다. 다만, 변수 바구니에 내용을 담는 ‘할당’은 코드의 실행 단계에서 진행된다.

</br>

✏️ var, const, let


  자바스크립트는 원래 var를 이용해서 변수를 선언했었는데, var를 이용한 선언문에서 발생하는 호이스팅과 같은 유연함 때문에 ES6에서는 const와 let를 이용한 변수 선언문이 추가되었다.

이에 대해서는 15장에 구체적인 내용이 등장하게 된다.


[01장. 프로그래밍]

</br>

✏️ 코드는 실생활과 멀리 떨어진 복잡한 무언가가 아니라, 소통을 위한 언어다.


 언어는 항상 오해를 만드는데, 컴퓨터는 감사하게도 그 오해를 오류를 통해서 설명해준다.

다만 그래서, 컴퓨터는 자기가 무엇을 이해하고 있는지 정확하게 인지하기 위해서 여러가지 규칙이 정해져있다. 이것이 각각의 프로그래밍 언어에 문법이 있는 이유이다.

</br>

✏️ 프로그래머는 논리적이고 수리적으로 글을 쓸 줄 알아야한다.


 프로그래밍을 할 때, 컴퓨터에게 모든 절차를 문어체로 설명해주는 것은 많은 한계가 있다. 코드가 길어질뿐더러, 절차를 일일히 설명해주는 것은 오류를 만들 확률이 너무 높아진다.

그래서 프로그래머는 풀어야할 문제를 작은 단위로 분해하고, 패턴화해서 패턴을 추출해낼 수 있어야한다.

이것을 컴퓨팅 사고라고 하고, 이것을 위해 프로그래머에게는 논리적이고 수학적인 사고가 요해진다.