변수란 값을 저장하는 할당받은 메모리 공간 또는 그 공간을 식별하는 이름을 뜻한다. 

변수란 왜 중요한가? 예를 들어 10 + 20 을 계산해보자 10, 20, +는 임의의 메모리에 저장되고 연산은 cpu에서 수행한다 

결과값 30은 어디로 갈까? 30 역시 임의의 메모리에 저장된다.  연산을 수행했다는 말은 보통 그 값을 활용하기 위해서이다. 그런데 저 30이라는 값을 어떻게 다시 쓸까 30이 저장된 임의의 메모리에 직접 접근해야할까?

 

답은 접근 불가이다. 메모리에는 30이라는 값 말고도 운영체제의 중요한 값이 저장되어 있다. 혹여나 실수로 값을 잘못 바꾸게 된다면 치명적인 에러가 발생한다. 그렇기 때문에 자바스크립트는 개발자의 메모리 직접 접근을 허용하지 않는다.

그리고 허용해도 문제는 남아있다. 같은 코드라도 매 실행마다 메모리 상황에 따라 매번 임의의 메모리에 접근한다. 아무리 임의의 메모리를 써먹으려 해도 쓸수가 없다. 

 

이제 값의 할당을 해보자. var score = 80; score = 90; 이라는 코드는 호스팅 효과로 임의의 메모리 3곳에 undefined, 80, 90이라는 값이 담긴다. 메모리가 3군데 값이 담겼지만 최종적으로 변수가 가르키는 주소는 90이 들어있는 주소다.

나머지 값들은 쓰지 않는 값이 되어 자바스크립의 내장 기능으로 인해 자동으로 비워진다. 다만 언제 비워질지는 정확히 알수 없다. 

 

매니지드 언어, 비매니지드 언어 

매니지드 언어는 개발자가 메모리를 제어하지 않고 자바스크립트처럼 언어 차원에서 관리하는 것이다.

장점으로는 편이성과 일정이상의 성능을 제공하지만 최적화 효율을 따지자면 손색이 있다.

 

반대로 비매니지드 언어가 있다 c가 대표적인 예로 malloc(), free()등으로 개발자가 제어를 한다. 개발자 역량에 따라 좋은 효율을 보여주지만 역으로 치명적인 문제를 일으킬 수도 있다.

 

식별자- 식별자는 값이 저장된 주소를 식별하는 존재를 다 식별자라 부른다. 변수,클레스, 함수등이 전부 식별자다.

 

식별자의 명명 규칙

1. 특수문자를 제외한 문자, 숫자, $, _ 를 사용할 수 있다.  

2. 특수문자를 제와한 문자,$,_ 를 식별자 맨 처음에 쓸 수 있다. 숫자는 안됨

3. 예약어는 안된다. 예약어는 코드를 쓸때 쓰는 키워드들이다. switch, if, this, for 등등 

 

자주쓰는 명명 방식 - 두 단어 이상이 결합된 길이가 긴 식별자를 적을 때 쓰는 규칙

 

카멜 케이스 classScore 

앞단어의 첫글자는 소문자 뒷단어의 첫글자는 대문자로 쓰는 방식, 함수나 변수를 정의할 때 많이 쓴다.

스네이크 케이스 class_score

첫글자는 앞뒤 소문자로 쓰고 단어 사이에 _를 추가한 케이스

파스칼 케이스 ClassScore 

앞뒤 첫글자를 대문자로 쓰는 방식, 생성자 함수, 클레스에서 많이 쓴다.

 

변수 선언 

 

변수 선언은 메모리를 할당받아 임의의 주소에 값을 저장하는 준비 단계이다. 

변수 선언 키워드는 var, let, const 등이 있다. 

 

var은 let, const 보다 먼저 나온 키워드로 유일한 키워드였다. let, const는 var의 단점을 해결하기 위해 나온 키워드다.

var의 단점은 3가지로

 

1.중복 선언이 가능하다. 변수가 중복되어도 에러가 나오지 않는다. 대형 프로젝트에서 변수가 중복이 되었을 때 알기 어려울 것이다. 그 상태에서 실행된다면 어떻게 될까? 에러가 당연히 나올 것이다.

 

2. 호스팅 문제, 호스팅은 변수 선언을 코드 실행 런타임 전에 스코프 최상단에 올려서 먼저 처리하는 방식이다. 

이것의 문제는 가독성이다. 변수 선언이 코드 최하단에 있고 변수 참조는 최상단에 뜬금없이 나와도 에러가 나오지 않는다.

 

스코프는 변수가 사용되는 영역을 말한다.  

 

3. 전역변수 문제 앞의 호스팅 문제와 연결된다. var은 함수스코프로 함수 {}를 지역변수로 인식한다. 

그 밖의 영역의 var은 전역변수로 인식해버린다.

 

let,const는?

 

1.중복이 불가능하다. 중복은 에러 표시가 뜬다.

2.호스팅 문제도 해결했다. 호스팅은 하지만 undefined를 넣어 초기화를 하지 않는다. 선언보다 먼저 참조가 나와도

참조에러가 뜨면서 에러가 뜬다.

 3. 함수 스코프가 아닌 블록스코프로 범위가 훨씬 넓어져 전역변수의 문제를 해결했다.

 

let의 특징 재할당 가능, const 재할당 불가능(원시값 말고 객체는 변경 가능)

 

 

 

메모리는 메모리 셀로 구성되어있다. 메모리셀은 1바이트 크기로 메모리가 읽고 쓰는 단위 역시 1바이트다.

 

값 - 값은 코드실행시 평가되어 값을 생성하거나 참조하는 것을 말한다. 

 

리터럴 - 문자 혹은 약속된 기호들로 값에 해당된다.

리터럴의 종류 - 간단하다 리터를은 값이므로 변수에 들어가는 모든것은 리터럴이다. 

 

표현식 - 평가되어 값을 만드는 식

 

문- 명령문이라고도 한다. 문이 모여 코드가 만들어진다. 토큰으로 나눌 수 있다. 토큰은 더 이상 나눌 수 없는 의미를 가진 최소 문자, 문은 표현식과 표현식이 아닌 것으로 나뉨, 표현식인지 알 수 있는 방법 변수에 할당해보면 됨 변수는 값만 들어가므로 변수에 들어가면 표현식임

 

 

 

'진행중 > 백지쓰기[복습]' 카테고리의 다른 글

백지쓰기 6일차  (0) 2022.09.04
백지쓰기 5일차  (0) 2022.08.23
백지쓰기 4일차  (0) 2022.08.21
백지쓰기 3일차  (0) 2022.08.20
백지쓰기 1일차  (0) 2022.08.18

+ Recent posts