프로그래밍
프로그래밍이란 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션입니다.
프로그래밍이란 0과 1밖에 알지 못하는 기계가 실행할 수 있을 정도로 정확하고 상세하게 요구사항을 설명하는 작업이라 볼 수 있고
이러한 이유로 문제 해결 방안을 고려할 때 컴퓨터의 입장에서 문제를 바라봐야합니다.
이때 필 요것이 컴퓨팅 사고입니다.
렌더링
렌더링이란 HTML, CSS, 자바스크립트로 작성된 문서를 해석해서 브라우저에 시각적으로 출력하는 것을 말합니다.
때로는 서버에서 데이터를 HTML로 변환해 브라우저에게 전달하는 과정 서버사이드 렌더링(SSR)을 가리키기도 합니다.
변수
변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념입니다.
하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말하며 값의 위치를 가리키는 상징적인 이름입니다.
변수 이름은 식별자라고도 하는데 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말합니다.
변수 선언의 실행 시점과 변수 호이 스팅
console.log(aa);
var aa;
자바스크립트 코드는 인터피러터에 의해 한 줄씩 순차적으로 실행되므로
위의 코드는 참조 에러가 발생할 것처럼 보이지만 undefined가 출력됩니다!
그 이유는 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행되기 때문입니다.
위의 말을 설명하자면 다음과 같습니다.
자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기에 앞서
먼저 소스코드의 평가과정을 거치면서 소스코드를 실행하기 위한 준비를 합니다.
이때 소스코드 실행을 위한 준비단계인 소스코드의 평가과정에서
자바스크립트 엔진은 변수 선언을 포함한 모든 선언문을 소스코드에서 찾아내 먼저 실행합니다.
그리고 소스코드의 평가 과정이 끝나면 변수 선언을 포함한 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행합니다.
즉, 자바스크립트 엔진은 변수 선언이 소스코드의 어디에 있든 상관없이 다른 코드보다 먼저 실행합니다.
따라서 변수 선언이 소스코드의 어디에 위치하는지와 상관없이 어디서든지 변수를 참조할 수 있습니다.
변수 선언문이 코드의 선두로 끌어올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이 스팅이라 합니다.
할당
변수 선언과 할당의 실행 시점은 다릅니다. 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행됩니다.
예제를 살펴보겠습니다!
console.log(aa) // undefined
var aa; // 변수 선언
aa = 80; // 값의 할당
console.log(aa) // 80
위의 예제를 실행하면 변수에 값을 할당할 때 이전 값 undefined가
저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값 80을 새롭게 저장하는 것이 아닌
새로운 메모리 공간을 확보하고 그곳에 할당 값 80을 저장하는 것입니다.
그렇다면 aa변 수의 이전 값인 undefined는 어떤 변수도 값을 가지고 있지 않습니다!
다시 말해 어떤 식별자와도 연결되어 있지 않고 이것은 undefined가 더 이상 필요하지 않다는 것을 의미하고
아무도 사용하지 않으니 필요하지 않은 것입니다. 이러한 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제됩니다.
단 메모리에서 해제될지는 예측할 수 없습니다.
가비지 콜렉터
가비지 콜렉터는 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용하지 않는 메모리를 해제하는 기능을 말합니다.
더이상 사용되지 않는 메모리란 간단히 말하면 어떤 식별자도 참조하지 않는 메모리 공간을 의미합니다. 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지합니다.
값의 재할당
값의 재할당이란 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는 것을 말합니다.
재할당은 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것입니다.
var키워드로 선언한 변수는 선언과 동시에 undefined로 초기화되기 때문에 엄밀히 말하자면
변수에 처음으로 값을 할당하는 것도 재할당이라 볼 수 있습니다.
재할당은 변수에 저장된 값을 다른 값으로 변경하기 때문에 변수라고 합니다.
값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아닌 상수라 합니다.
상수는 한번 정해지면 변하지 않는 값입니다! 다시 말해 상수는 단 한 번만 할당할 수 있는 변수입니다.
const 키워드를 사용해 선언한 변수는 재할당이 금지됩니다. 즉, const키워드는 단 한 번만 할당할 수 있는 변수를 선언합니다.
따라서 const 키워드를 사용하면 상수를 표한할 수 있습니다.
카멜 케이스와 파스칼 케이스
자바스크립트에서는 일반적으로 변수나 함수의 이름에는 카멜 케이스를 사용하고,
생성자 함수, 클래스의 이름에는 파스칼 케이스를 사용합니다.
// 카멜 케이스
let firstName;
// 파스칼 케이스
let FirstName;
오늘은 자바스크립트의 기본기가 부족한 것 같아 자바스크립트를 공부하였습니다.
늘 사용하던 변수이지만 할당 부분에서 메모리 공간을 지우고 할당 값을 새롭게 저장하는 게 아닌
새로운 메모리 공간을 확보하고 그곳에 저장하고 가비지 콜렉터를 통해 메모리를 해제하는 것은 처음 알았습니다!
아직 정말 갈길이 먼 것 같습니다!
자바스크립트 공부는 정말 꾸준히 열심히 해야겠다는 생각이 들었습니다!
앞으로도 열심히 공부해서 좋은 개발자가 되기 위해 노력할 것입니다!
👍👍👍✍️✍️
'자바스크립트' 카테고리의 다른 글
TIL] 제어문 (0) | 2021.07.14 |
---|---|
TIL] 연산자 (0) | 2021.07.14 |
TIL] 데이터 타입 (0) | 2021.07.13 |
TIL] 표현식과 문 (0) | 2021.07.12 |
TIL] 자바스크립트 기초 문법 (0) | 2021.06.25 |