04 ~ 07
04 ~ 07 챕터는 JS만의 개념이라기보단,
컴퓨터 전반적으로 적용될 수 있는 용어 정의를 다시 엄밀히 짚고 넘어가는 느낌이 강했습니다.
04 - 변수
4.1 변수란 무엇인가? 왜 필요한가?
변수란 데이터를 관리하기 위한 핵심 개념으로써,
메모리 주소를 직접 접근하는 방법 대신 메모리 공간을 식별하기 위해 붙인 상징적인 이름을 뜻합니다.
변수에 대해 데이터 식별을 위한 식별자로써의 역할만 알고 있었는데,
메모리 주소의 직접 접근을 피하는, 메모리 보호 측면에서의 역할도 수행한다는 관점을 알게 되어 좋았습니다.
(이 메모리 보호 측면에서의 관점은 이후 자료형의 존재 이유에서도 연결되었습니다)
4.4 변수 선언의 실행 시점과 변수 호이스팅
변수 선언이 런타임이 아닌 평가 과정에서 먼저 실행된다는 것, 그리고 var는 선언과 할당이 동시에 이뤄진다는 것을 새롭게 알았습니다.
let과 const는 그렇지 않기에 선언 자체는 호이스팅 되지만 실제 할당(초기화) 전에는 참조할 수 없습니다.
console.log(score); // undefined
var score = 80; // 변수 선언과 값의 할당
console.log(score); // 80
console.log(typeof name); // ReferenceError
let name = 'John';
console.log(typeof name); // ReferenceError
const name = 'John';
변수 호이스팅에 대해 아주 오래전에 JS 시작할 무렵 배웠었는데.. 까맣게 잊고 있다가 다시 보게 되었습니다. 😭
4.6 값의 재할당
재할당 시 기존 메모리 공간을 지우고 저장하지 않고 새로운 메모리 공간을 확보해 그곳에 저장한다는 것을 알게 되었습니다.
05 - 표현식과 문
5.5 세미콜론
세미콜론은 문의 종료를 나타냅니다.
JS 엔진상에서 소스코드 해석 중 세미콜론 자동 삽입 기능인 ASI를 암묵적으로 수행한다는 것을 알게되었습니다. 즉, 세미콜론을 붙이지 않아도 되지만.. 사용을 권장!
06 - 데이터 타입
6.1 숫자 타입
숫자 타입은 배정밀도 64비트 부동소수점 형식을 따릅니다. 즉, 모든 숫자는 실수입니다.
왜 JS는 이 하나의 숫자 타입만 쓸까요..
10일 안에 만들어야 했던 배경도 있고, 단순화를 노릴 수도 있었을 것 같습니다.
6.3 템플릿 리터럴
`` 백틱, 템플릿 리터럴이 멀티라인 문자열을 지원한다는 걸 알게 되었습니다. (이 목적으로 써본적이..)
그리고 런타임에 일반 문자열로 변환되어 처리됩니다.
6.5 undefined
개발자가 의도적으로 undefined를 할당하면 혼란스러우니, 값이 없음을 명시하고 싶을 때는 undefined 대신 null을 할당하는 것이 좋다는 것이 인상깊었습니다.
저는 개인적으로 undefined도 null도 할당해본 적이 거의 없는 것 같네요..?
6.6 Null
null을 할당할 때는 참조하지 않을 값이라는 것을 명시하는 것이고, 참조되지 않는 메모리 공간에 대해서는 JS의 가비지 컬렉션이 수행됩니다.
6.9 데이터 타입의 필요성
자료형의 존재 이유는 데이터 타입에 의한 메모리 공간의 확보-참조, 타입에 의한 값의 해석 *\때문입니다.
몇 바이트의 메모리를 사용해야 *낭비 없이\\ 값을 저장할 수 있는지 알아야 하고, 값의 종류에 따라 정해진 크기의 메모리 공간을 확보합니다.
자료형의 존재 이유를 알아보는 과정이 인상깊었습니다. 운영체제론의 개념들이 생각나기도 하고..
6.10 동적 타이핑
JS 변수는 선언이 아니라 할당에 의해 타입이 추론됩니다.
(생각해보니 당연합니다, let, const, var밖에 없으니까요..)
그리고 재할당에 의해 변수 타입이 동적으로 변합니다.
개발자로서 편리할 수 있지만, 위험성이 늘어납니다.
되도록 상수를 사용하고 변수의 유효 범위, 스코프를 최대한 좁게 만들게 할 수 있겠습니다.
07 - 연산자
7.2 할당 연산자
할당문은 값 자체로 평가되는 표현식인 문으로써 할당된 값으로 평가됩니다.
이 특성을 활용해 여러 변수에 동일한 값을 연쇄 할당할 수 있습니다.
var x;
console.log((x = 10)); // 10
var a, b, c;
a = b = c = 0;
이러한 할당 방식을 쓰고 있었지만 상세한 원리를 새로 알게되었습니다.
7.9 지수 연산자
2 ** 2
num **= 2;
...
Math.pow
메서드만 쓰고 있었는데 지수 연산자가 있는지 몰랐네요.
지수 연산자를 잘 쓰지는 않지만… 가독성 측면에서 이렇게 표기하는게 더 낫겠다 싶었습니다.
'모던자바스크립트-DeepDive' 카테고리의 다른 글
13 ~ 15 챕터 (0) | 2024.07.24 |
---|---|
08 ~ 12 챕터 (2) | 2024.07.24 |