[JavaScript] 변수 선언과 데이터 할당

Mark·2022년 8월 12일
0
post-thumbnail
post-custom-banner

1. 변수 선언

변수란 변경 가능한 데이터가 담길 수 있는 공간, 그릇이다. 어떤 변수를 선언하면 컴퓨터는 메모리에서 a라는 변수명을 가진 주소를 검색해 해당 공간에 담긴 데이터를 반환한다.

let a; // 변수 선언 
  • 변수 선언은 var, const, let 키워드로 할 수 있다.
  • 자바스크립트에서 변수 선언은 선언→초기화 단계를 거쳐 수행된다.
  • 선언 단계 : 변수명을 등록하여 자바스크립트 엔진에 변수의 존재를 알린다.
  • 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화

1) var

var name = "mark"
console.log(name);

var name = "markya"
console.log(name)
  • var의 경우 변수를 한 번 더 선언해도 에러가 나지 않는다.
  • var은 어떠한 규칙도 가지고 있지 않다.
  • 생성된 후 업데이트가 될 수도 있다.
  • 하지만 스스로 오류가 발생할 수 있다.
  • 코드가 어떤 것을 수행하는지 알 수 없다는 단점
  • 따라서 var는 되도록 쓰지 않는 것이 좋다.
  • 유연한 변수 선언으로 테스트에는 편하지만, 코드량이 많아진다면 에러를 찾기 힘들 수 있다.
  • 함수 레벨 스코프
  • ES6이후 이를 보완하기 위해 추가된 변수 선언 방신인 letconst가 있다.

2) let

let name = "mark"
let name = "markya" // 'name' has already been declared
  • 이미 선언되었다는 에러 메세지가 나온다.
  • 변수 재선언은 안된다.
  • 하지만 변수 재할당은 가능하다.
  • block 레벨 스코프
// 변수 재할당 
let name = "mark"
name = "markya" 

3) const

// 변수 재할당 
const name = "mark"
const name = "markya" 
console.log(name) //'name' has already been declared

name = "markya" 
console.log(name) // Uncaught TypeError: Assignment to constant variable.
  • 변수 재선언, 재할당 모두 불가능하다.
  • block 레벨 스코프
  • 따라서 바뀌지 않을 값은 const로 선언해주면 된다.

var, let, const를 비교해보자

function scope(){
	const a = 0;
	let b = 0;
	var c = 0;

	// {} 증괄호 안에 든 내용을 블럭이다. 
	
	if(a === 0){ // 코드 블럭 
		const a = 1;
		let b = 1;
		var c = 1;
		console.log(a, b, c); // 1, 1, 1
	}
	// var는 함수 단위라서 if문 밖에서 선언한 값이 변한다. 
	// let과 const로 선언한 겂은 어떤가요? if문 안쪽 내용이 바깥 내용에 영향을 주지 않는다. 	console.log(a, b, c); 0,0,1
}
  • 여기서 let과 const는 if 문 안쪽 내용이 바깥 내용에 영향을 주지 않는다. let과 const는 block 레벨 스코프이기 때문이다!
  • var는 함수 단위라서 if문 밖에서 선언한 값이 if문 안에서 선언한 1의 값과 동일하게 변한 것을 확인할 수 있다. 이는 var는 함수 단위이기 때문이다.

TIP : 모든 변수는 const로 선언하고, 변경 여지가 있는 경우 let으로 선언

2. 데이터 할당

👉 메모리 영역에서 일어나는 일

  • 데이터를 저장하기 위한 별도의 메모리 공간을 다시 확보
  • 데이터 저장
  • 그 주소를 변수 영역에 저장

👉  선언과 할당을 나눠서 하거나, 동시에 해도 자바스크립트 엔진은 같은 동작 수행

let a; // 변수 a 선언
a = 'abc' // 변수 a에 데이터 할당 

let a = 'abc' // 변수 선언과 할당을 한 문장으로 표현 
  • a라는 이름을 가진 주소를 검색해서 ‘abc’라는 문자열을 할당할 때 해당 위치에 문자열 ‘abc’를 저장하고 그 주소를 변수 영역에 저장한다.

👉 그렇다면, 변수 영역에 직접 대입하지 않고 이 단계를 거치는 이유는?

  • 데이터 변환을 자유롭게 하기 위함
  • 메로리 효율적 관리
  • 중복된 데이터 처리시 효율성이 높아진다.
  • 효율적으로 데이터 변환을 처리하려면 변수와 데이터를 별도의 공간으로 나누어 저장하는 것이 최적의 방법이다.

👉 결론!

변수명이 데이터를 저장하는 방식은 직접 데이터를 저장하는 것이 아니라 해당 데이터를 가진 주소값을 저장하는 것이다!


참고 자료

profile
개인 공부 정리
post-custom-banner

0개의 댓글