변수(Variable)

이보아·2024년 5월 8일
0

모던_자바스크립트

목록 보기
18/18
post-thumbnail

변수란?

변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념이며, 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다. 쉽게 말해 값의 위치를 가르키는 상징적인 이름이다.

  • 변수 이름: 메모리 공간에 저장된 값을 식별할 수 있는 고유의 이름
  • 변수 값: 변수에 저장된 값
  • 할당(assignment): 변수에 값을 저장하는 것
  • 참조(reference): 변수에 저장된 값을 읽어 들이는 것


식별자

식별자란? 어떤 값을 구별해서 식별할 수 있는 고유한 이름

  • 식별자는 값이 아니라 메모리 주소를 기억하고 있다.
  • 식별자는 변수 이름에만 국한해서 사용하지 않는다. 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자로고 불린다.
  • 식별자는 선언에 의해 자바스크립트 엔진에 식별자의 존재를 알림


변수 선언

변수 선언이란? 변수 생성을 의미하며 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결 해서 저장할 수 있게 준비한다.

  • 변수를 사용하려면 반드시 선언이 필요하다. 변수를 선언할때는 var, let , const 키워드를 사용한다.


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

자바스크립트 코드는 인터프리터에 의해 한 줄씩 순차적으로 실행된다.

💡변수 선언의 실행 시점: 변수 선언이 소스코드가 한줄씩 순차적으로 실행되는 시점 즉 런타임(runtime)이 아니라 그 이전 단계에서 먼저 실행된다.

❗ 변수 호이스팅(hoisting): 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라 한다.

/* 변수 선언문보다 변수 참조코드가 앞에 있는 경우  */
console.log(score); // undefined

var score;


값의 할당

값의 할당이란? 변수에 값을 할당할때 연산자 =을 사용하며 할당 연산자는 우변의 값을 좌변의 변수에 할당한다.

var score; //변수 선언과 값의 할당

score = 90; // 값의 재할당

var score = 90; // 변수 선언과 값의 할당
  • 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행된다.


값의 재할당

값의 재할당이란? 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는것을 의미한다.

var score = 80; //변수 선언과 값의 할당

score = 90; // 값의 재할당
  • 상수(constant): 값을 재할당할 수 없어, 저장된 값을 변경할 수 없는 변수

=> const 키워드는 값의 재할당이 금지되기에 상수로서 단 한번만 할당 가능함

가비지 콜렉터(Garbage Collector): 메모리 공간을 주기적으로 검사하여 어떤 식별자도 참조하지 않아 더 이상 사용되지 않는 메모리를 해제시킨다. 자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지한다.

매니지드 언어 / 언매니지드 언어
1. 매니지드 언어(Managed Language): C언어 같이 개발자가 명시적으로 메모리를 할당하고 해제하기 위해 malloc()과 free() 같은 low-level 메모리 제어기능을 제공함. 개발자가 주도하여 메모리를 제어할 수 있어 높은 수준의 최적화도 가능하지만 그만큼 오류가 발생할 위험도도 높다.

2. 언매니지드 언어(Unmanaged Language): 자바스크립트가 여기에 해당되며 메모리의 할당 및 해제를 위한 메모리 기능 관리 기능을 언어 차원에서 담당하고 개발자의 직접적인 메모리 제어를 허용하지 않는다. 더 이상 사용하지 않는 메모리의 해제는 가비지 콜렉터가 수행한다. 어느 정도의 일정한 생산성을 확보할 수 있어 안정적이나, 성능 면에서 어느 정도 손실을 감수해야 한다.



식별자 네이밍 규칙

  • 특수문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)를 포함할 수 있음
  • 특수문자를 제외한 문자, 언더스코어(_), 달러 기호($)로 시작해야 하며, 숫자로 시작하는건 허용하지 않음
  • 예약어는 사용할 수 없음

네이밍 컨벤션(Naming Convention)

하나 이상의 영어 단어로 구성된 식별자를 가독성 좋게 만들기 위해 규정한 명명 규칙

// 카멜 케이스(camelCase) : 주로 변수, 함수명
var firstName;

// 파스칼 케이스(PascalCase) :주로 생성자 함수, 클래스명
var FirstName;

// 스네이크 케이스(snake_case)
var first_name;

// 헝가리언 케이스 (typeHungarianCase)
var strFirstName; // type + identifier
var $elem = document.getElementById("myId"); // DOM 노드
var observable$ = fromEvent(document, "click"); // RxJS 옵저버블

변수(Variable)를 정리 하면서.. 🤔

모던 자바스크립트 책을 혼자 읽기 막막해서 스터디를 시작했다. 스터디 팀원들과 각자 정리하며 공부하니까 내가 놓쳤던 부분을 다른분들이 정리한 글을 보면서 이해하게 되서 좋은거 같다 팀 과제로 너무 바쁜 기간이지만 그래도 나를 위한 공부니까 매일 꾸준히 해나가야겠다.

참고 서적🙇‍♀️

모던 자바스크립트 Deep Dive 04장 변수 (34p ~ 49p)

profile
매일매일 틀깨기

0개의 댓글