egg.silver 2024. 3. 27. 09:56

 


4.1 변수란 무엇인가? 왜 필요한가?

 

애플리케이션 - 데이터를 다룸
복잡한 애플리케이션이라도 데이터를 입력(input)받아 처리하고 결과를 출력(output)하는 것이 전부

➔ 변수 : 데이터를 관리하기 위한 핵심 개념

 

10 + 20

 

위 식을 계산할 때, 컴퓨터는 CPU를 사용하여 연산하고, 메모리를 사용하여 데이터를 기억함

 

➔ 메모리(memory) : 데이터를 저장할 수 있는 메모리 셀(memory cell)의 집합체

                                     : 메모리 셀 하나의 크기는 1바이트(1 byte = 8 bit)
                                     : 컴퓨터는 1바이트 단위로 데이터를 저장하거나 읽어들임
                                     : 각 셀은 고유의 메모리 주소를 가짐

                                     : 메모리에 저장되는 데이터의 종류에 상관없이 모든 값은 2진수로 저장됨

 

이러한 메모리 값에 저장된 값에 접근하기 위한 것이 변수


변수(variable) : 하나의 값을 저장하기 위해 확보한 메모리 공간 자체
                            : 사람이 이해할 수 있는 언어로 값이 저장된 메모리 공간에 붙인 상징적 이름
                            때문에 변수에 저장된 값의 의미를 파악할 수 있는 변수 이름은 가독성을 높임

 

 


4.2 식별자

식별자 : 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름
           : 식별자는 값이 아닌 메모리 주소를 기억하고 있음

           : 식별자는 선언에 의해 자바스크립트 엔진에 식별자의 존재를 알리며 네이밍 규칙을 준수해야 함

 


4.3 변수 선언

변수 선언(variable declaration)
: 변수를 생성하는 것

: 변수 선언에 의해 확보된 메모리 공간은 확보가 해제되기 전까지는 누구도 확보된 메모리 공간을 사용할 수 없도록 보호됨

: 변수 선언 시, var, let, const 키워드를 사용함

: 변수 선언에 의해 확보된 메모리 공간은 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당되어 초기화 됨

자바스크립트 엔진의 변수 선언 단계
1. 선언 단계 : 변수 이름을 등록하여 자바스크립트 엔진이 변수의 존재를 알림
2. 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화 

 

키워드* :  자바스크립트 코드를 해석하고 실행하는 자바스크립트 엔진이 수행할 동작을 규정한 일종의 명령어

 


4.4 변수 선언의 실행 시점과 변수 호이스팅

변수 호이스팅(varialble hoisting)

: 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징

: 모든 선언문은 런타임 이전 단계에서 실행

변수 선언뿐 아닌 var, let, const, function, function*, class 키워드를 사용해 선언하는 모든 식별자는 호이스팅

 

console.log(a); // undefined

var a; // 변수 선언문

 

└ 런타임 시점 이전에 변수 선언이 실행되기 때문에, 에러가 나지 않고 undefined가 출력됨

 


4.5 값의 할당

변수에 값을 할당(assignment)할 때는 할당 연산자 =를 사용하고, 우변의 값을 좌변의 변수에 할당함

 

//선언과 할당을 따로한 경우
var a;
a = 100;

//선언과 할당을 하나의 문으로 단축 표현한 경우
var a = 100;

 

└ 자바스크림트 엔진은 변수 선언과 값의 할당을 하나의 문으로 단축 표현해도 변수 선언과 값의 할당을 2개의 문으로 나누어 가각 실행

변수 선언은 런타임 이전에 실행, 값의 할당은 런타임에 실행됨

 

console.log(a); //undefined

var a = 100;

console.log(a); //100

 

└ 실행 순서

      1. 런타임 이전에 변수 선언 (선언과 동시에 초기화)

      2. 런타임 시점에 코드 한 줄씩 실행 ( 첫번째 로그 실행    a에 값 할당    두번째 로그 실행)

 

변수에 값을 할당할 때는 이전 값을 지우는 것이 아닌 새로운 메모리 공간을 확보하고 그곳에 새로운 값을 할당

 


4.6 값의 재할당

 

재할당 : 이미 값이 할당된 변수에 새로운 값 또다시 할당

└ 값을 다른 값으로 변경함을 의미

└ 값을 재할당할 수 없다면 변수가 아닌 상수 (const 키워드는 재할당이 금지됨)

└ 재할당하는 경우, 이전의 메모리 공간을 지우고 새 값을 저장하는 것이 아닌 새로운 메모리 공간을 확보하고 그 공간에 새롭게 값을 저장

 

 

가비지 콜렉터* : 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능

언매니지드 언어* : C언어와 같이 메모리 제어를 개발자가 주도할 수 있음

매니지드 언어* : 메모리 관리 기능을 언어 차원에서 담당하고 개발자의 직접적인 메모리 제어 허용하지 않음, 메모리의 해제는 가비지 콜렉터가 수행

 


4.7 식별자 네이밍 규칙

1. 특수문자를 제외한 문자, 숫자, 언더스코어,달러 기호 포함 가능

2. 숫자로 시작하는 것 불허

3. 예약어는 식별자로 사용 불가

var first-name; //1번에 해당, SyntaxError: Unexpected token —
var 1st; //2번에 해당, SyntaxError: Invalid or unexpected token
var this; //3번에 해당, SyntaxError: Unexpected token this

 

 

자바스크립트는 대소문자를 구별하기에 다음은 각각 별개의 변수

var firstname;
var firstName;
var FIRSTNAME;

 

 

자바스크립트에서
변수, 함수 이름 : 카멜 케이스

생성자 함수(객체 만드는 함수 (ex)set, map), 클래스 이름 : 파스칼 케이스

//카멜 케이스
var firstName;

//파스칼 케이스
var FirstName