Skip to content

Latest commit

Β 

History

History
362 lines (224 loc) Β· 13.3 KB

File metadata and controls

362 lines (224 loc) Β· 13.3 KB

4.1 λ³€μˆ˜λž€ 무엇인가? μ™œ ν•„μš”ν•œκ°€?

λ³€μˆ˜λŠ” 데이터λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ κ°œλ…μ΄λ‹€

10+20 μ΄λΌλŠ” 식이 μžˆμ„ λ•Œ μ‚¬λžŒμ˜ λ¨Έλ¦¬μ†μ—μ„œλŠ”

  1. 숫자 10κ³Ό 20을 λ‘λ‡Œμ— κΈ°μ–΅(μ €μž₯)ν•œλ‹€. μ΄λ•ŒλŠ” 10, + 20 μ΄λΌλŠ” 기호의 의미λ₯Ό μ•Œκ³  μ΄ν•΄ν•œλ‹€ (λ¦¬ν„°λŸ΄κ³Ό μ—°μ‚°μž)
  2. μ—°μ‚°ν•œλ‹€ μ΄λ•Œ ν‘œν˜„μ‹μ˜ 의미λ₯Ό ν•΄μ„νŒŒμ‹±ν•œλ‹€
  3. μ—°μ‚°ν•œ κ²°κ³Όλ₯Ό λ‘λ‡Œμ— κΈ°μ–΅(μ €μž₯)ν•œλ‹€ 이 μˆœμ„œκ°€ 이루어진닀

μ‚¬λžŒμ€ μ € 과정을 λͺ¨λ‘ λ‘λ‡Œμ—μ„œ μ²˜λ¦¬ν•˜μ§€λ§Œ, μ»΄ν“¨ν„°λŠ” κΈ°μ–΅, μ—°μ‚° ν•˜λŠ” 과정이 λ‹€λ₯Έ λΆ€ν’ˆμ—μ„œ 이루어진닀

  1. 10κ³Ό 20을 λ©”λͺ¨λ¦¬μ—μ„œ κΈ°μ–΅ν•œλ‹€
  2. CPUμ—μ„œ μ—°μ‚°ν•œλ‹€
  3. μ—°μ‚°ν•œ κ²°κ³Όλ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ κΈ°μ–΅ν•œλ‹€

그럼 기얡을 λ‹΄λ‹Ήν•˜λŠ” λ©”λͺ¨λ¦¬μ™€ 연산을 λ‹΄λ‹Ήν•˜λŠ” CPU에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄μž

λ©”λͺ¨λ¦¬

λ©”λͺ¨λ¦¬λŠ” 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬ μ…€μ˜ 집합체이닀 λ©”λͺ¨λ¦¬ μ…€ ν•œκ°œμ˜ ν¬κΈ°λŠ” 1byte(8bit)이닀. 데이터가 2μ§„μˆ˜ ν˜•νƒœλ‘œ 이곳에 μ €μž₯λœλ‹€

λ©”λͺ¨λ¦¬ μ…€λ§ˆλ‹€ 고유의 μ£Όμ†Œκ°€ μ‘΄μž¬ν•œλ‹€

μ»΄ν“¨ν„°λŠ” 이 λ©”λͺ¨λ¦¬ μ…€ λ‹¨μœ„λ‘œ 데이터λ₯Ό μ €μž₯(write) ν•˜κ±°λ‚˜ μ½λŠ”λ‹€(read)

값을 μ €μž₯ν•˜λŠ” μ—­ν• 

10+20을 μ—°μ‚°ν• λ•Œ, μš°μ„  10κ³Ό 20을 λ©”λͺ¨λ¦¬ 셀에 μ €μž₯(write)ν•œλ‹€ 그리고 연산을 ν• λ•Œ λ©”λͺ¨λ¦¬ 셀을 읽어 10κ³Ό 20μ΄λΌλŠ” 숫자λ₯Ό μ–»μ–΄ λ‚Έλ‹€

값을 μ‹λ³„ν•˜κΈ° μœ„ν•œ μ—­ν• 

μ•„κΉŒ μš°λ¦¬λŠ” 10+20을 λ”ν•΄μ„œ 30μ΄λΌλŠ” 값을 μ–»μ—ˆλ‹€. 이 값은 또 λ‹€λ₯Έ λ©”λͺ¨λ¦¬ 셀에 μ €μž₯λœλ‹€

그런데, μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λ©”λͺ¨λ¦¬ 셀에 직접 μ ‘κ·Όν•  수 μ—†λ‹€ μžλ°”μŠ€ν¬λ¦½νŠΈ λ©”λͺ¨λ¦¬μ— κ΄€ν•œ λ‚΄μš©μ€ λΈ”λ‘œκ·Έ μ°Έκ³  포인터λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” λ‹€λ₯Έ μ–Έμ–΄μ™€λŠ” λ‹€λ₯΄κ²Œ, λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 값에 직접 μ ‘κ·Όν•  수 μ—†λ‹€ μ™œλƒν•˜λ©΄ 값이 μ €μž₯될 λ•Œ λ©”λͺ¨λ¦¬μ˜ 상황에 따라 어디에 μ €μž₯λ˜λŠ”μ§€ μž„μ˜λ‘œ κ²°μ •λœλ‹€

κ·Έλž˜μ„œ, 값에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œλŠ” 항상 λ³€μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ 값에 μ ‘κ·Όν•΄μ•Ό ν•œλ‹€

[!note] 정리 λ³€μˆ˜λŠ” ν•˜λ‚˜μ˜ 값을 μ €μž₯ν•˜κΈ° μœ„ν•΄ ν™•λ³΄ν•œ λ©”λͺ¨λ¦¬ 곡간, λ˜λŠ” κ·Έ λ©”λͺ¨λ¦¬ 곡간을 μ‹λ³„ν•˜κΈ° μœ„ν•΄ 뢙인 이름이닀

정리

μš©μ–΄λ₯Ό λ‹€μ‹œ μ •λ¦¬ν•˜μžλ©΄ λ³€μˆ˜μ— 값을 μ €μž₯ν•˜λŠ” 것을 ν• λ‹Ή, λŒ€μž…, μ €μž₯(assignment) 이라고 ν•˜κ³  λ³€μˆ˜μ— μ €μž₯된 값을 μ½λŠ” 것을 μ°Έμ‘°(reference) 라고 ν•œλ‹€

4.2 μ‹λ³„μž

μ‹λ³„μžλž€ μ΄λ¦„μ—μ„œλ„ μ•Œ 수 μžˆλ“―, μ–΄λ–€ 값을 κ΅¬λ³„ν•˜μ—¬ 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름이닀

ν•˜μ§€λ§Œ, μ‹λ³„μžλŠ” 사싀 값을 κ΅¬λ³„ν•˜μ§€λŠ” λͺ»ν•œλ‹€ λŒ€μ‹  λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ΅¬λ³„ν•œλ‹€ μ‹λ³„μžκ°€ κΈ°μ–΅ν•˜κ³  μžˆλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 읽고, κ·Έ λ‹€μŒ λ©”λͺ¨λ¦¬μ— λ‹΄κΈ΄ 값을 μ½λŠ” 과정이 μ΄λ£¨μ–΄μ§€λŠ” 것이닀

[!note] μ‹λ³„μž μ‹λ³„μžλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— 뢙인 이름이닀

λ”°λΌμ„œ λ‹¨μˆœν•œ λ³€μˆ˜ 뿐만 μ•„λ‹ˆλΌ ν•¨μˆ˜, 클래슀 λ“± λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  값을 μ €μž₯ν•˜λŠ” 이름을 μ‹λ³„μžλΌκ³  λΆ€λ₯Έλ‹€

4.3 λ³€μˆ˜ μ„ μ–Έ

λ³€μˆ˜ μ„ μ–Έμ΄λž€, λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ² λ‹€κ³  μ„ μ–Έν•˜μ—¬ λ³€μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 것을 λ§ν•œλ‹€ 과정은 λ‹€μŒκ³Ό 같이 이루어진닀

  1. λ³€μˆ˜ 이름이 μ„ μ–Έλ˜λ©΄, λ©”λͺ¨λ¦¬ μ£Όμ†Œ ν•œκ°œλ₯Ό κ³¨λΌμ„œ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•œλ‹€
  2. 그리고 값을 μ €μž₯ν•  수 μžˆλ‹€

λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄μ„œλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. ES6 μ „μ—λŠ” var ν‚€μ›Œλ“œ 밖에 μ—†μ—ˆμ§€λ§Œ, 이후 letκ³Ό constκ°€ λ“±μž₯ν–ˆλ‹€ var은 단점이 많기 λ•Œλ¬Έμ— letκ³Ό constλ₯Ό μ‚¬μš©ν•  것을 ꢌμž₯ν•œλ‹€

아직 letκ³Ό const에 λŒ€ν•΄ λ°°μš°μ§€ μ•Šμ•˜μœΌλ―€λ‘œ, μš°μ„ μ€ var을 μ΄μš©ν•΄ λ³€μˆ˜ 선언에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

var μ„ μ–Έμ‹œ μΌμ–΄λ‚˜λŠ” κ³Όμ •

  1. λ³€μˆ˜λ₯Ό μ„ μ–Έλœλ‹€ var score; μ΄λ ‡κ²Œ 선언을 ν•˜λ©΄, λ©”λͺ¨λ¦¬ 곡간을 확보할 수 μžˆλ‹€

  2. μ΄ˆκΈ°κ°’μ΄ μ„€μ •λœλ‹€ var score=0; 처럼 μ‚¬μš©μžκ°€ μ΄ˆκΈ°ν™” ν•΄μ£Όμ§€ μ•Šμ€ κ²½μš°μ—λŠ” 값이 undefined둜 μžλ™ μ΄ˆκΈ°ν™” λœλ‹€

undefinedλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ œκ³΅ν•˜λŠ” μ›μ‹œ νƒ€μž…μ˜ 값이닀 μžμ„Έν•œ λ‚΄μš©μ€ 6μž₯의 [[데이터 νƒ€μž…]] μ—μ„œ μžμ„Ένžˆ μ•Œμ•„λ³Ό 수 μžˆλ‹€

letκ³Ό const의 μ΄ˆκΈ°κ°’

[!warning] μ°Έκ³  let은 μžλ™μœΌλ‘œ μ΄ˆκΈ°ν™” λ˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ μ΄ˆκΈ°κ°’μ΄ undefinedκ°€ μ•„λ‹ˆλ‹€ const도 μžλ™μœΌλ‘œ μ΄ˆκΈ°ν™” λ˜μ§€ μ•ŠλŠ”λ‹€. constλŠ” μ΄ˆκΈ°κ°’μ„ μ„€μ •ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€

4.4 λ³€μˆ˜ μ„ μ–Έμ˜ μ‹€ν–‰ μ‹œμ κ³Ό λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

ν˜ΈμŠ€νŒ…? ν˜Έμ΄μŠ€νŒ…?

ν˜ΈμŠ€νŒ…(Hosting)κ³Ό ν˜Έμ΄μŠ€νŒ…(Hoisting)은 μ΄λ¦„λ§Œ λΉ„μŠ·ν•œ μ™„μ „ λ‹€λ₯Έ κ°œλ…μ΄λ‹€- 인도와 μΈλ„λ„€μ‹œμ•„ 정도 차이라고 μƒκ°ν•˜λ©΄ λœλ‹€

ν˜ΈμŠ€νŒ… 은 μ›Ή μ„œλΉ„μŠ€λ‚˜ μ„œλ²„ ν˜ΈμŠ€νŒ…μ„ ν•  λ•Œ μ“°λŠ” μš©μ–΄μ΄λ‹€

ν™ˆνŽ˜μ΄μ§€λ₯Ό λ§Œλ“€μ–΄μ„œ AWSμ„œλ²„μ— 올리면, μ„œλ²„μ— ν”„λ‘œμ νŠΈκ°€ 'ν˜ΈμŠ€νŒ…' λ˜μ—ˆλ‹€ 라고 ν•œλ‹€

반면 ν˜Έμ΄μŠ€νŒ…μ€ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 'νŠΉμ§•'을 μ§€μΉ­ν•˜λŠ” μš©μ–΄λ‹€.

JavascriptλŠ” 인터프리터 μ–Έμ–΄μž„κ³Ό λ™μ‹œμ— 컴파일 μ–Έμ–΄λ‹€. κ·Έλž˜μ„œ μ΄λŸ¬ν•œ νŠΉμ§•μ΄ μ‘΄μž¬ν•œλ‹€.

ν˜Έμ΄μŠ€νŒ…(Hoisting)의 κ°œλ…

ν˜Έμ΄μŠ€νŒ…(Hoisting)은 JavaScriptμ—μ„œ λ³€μˆ˜μ™€ ν•¨μˆ˜ 선언이 μŠ€μ½”ν”„μ˜ μƒλ‹¨μœΌλ‘œ λŒμ–΄μ˜¬λ €μ§€λŠ” νŠΉμ§•μ΄λ‹€

μ½”λ“œ μ‹€ν–‰ 전에 JavaScript 엔진에 μ˜ν•΄ μ²˜λ¦¬λœλ‹€

아직 잘 와 λ‹Ώμ§€ μ•ŠμœΌλ‹ˆ μ½”λ“œ μ˜ˆμ‹œλ₯Ό λ³΄λ©΄μ„œ μ΄ν•΄ν•΄λ³΄μž.

ν˜Έμ΄μŠ€νŒ…μ˜ μ’…λ₯˜μ—λŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…κ³Ό ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ μžˆλ‹€.

λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

λ³€μˆ˜ 선언을 ν•˜λ©΄ μ½”λ“œμ˜ 맨 μœ„λ‘œ λŒμ–΄μ˜¬λ €μ§„λ‹€

[!question] ν˜Έμ΄μŠ€νŒ…μ˜ 이점이 λ¬΄μ—‡μΈκ°€μš”? μ–΄λ””μ„œλ“  νŽΈλ¦¬ν•˜κ²Œ λ³€μˆ˜λ₯Ό 선언해도 λœλ‹€

단, μ΄ˆκΈ°ν™”(κ°’ ν• λ‹Ή)λŠ” λŒμ–΄μ˜¬λ €μ§€μ§€ μ•ŠλŠ”λ‹€. 즉 λ‹¨μˆœνžˆ μ„ μ–Έλ§Œ ν•΄μ€€λ‹€. var둜 μ„ μ–Έλœ ν‚€μ›Œλ“œμ˜ 경우, μ΄λ•Œ undefined둜 μ΄ˆκΈ°ν™” λœλ‹€

console.log(x); // xκ°€ μ„ μ–Έλœ μƒνƒœλΌ undefinedκ°€ 좜λ ₯λœλ‹€
var x = 100;
console.log(x); //100이 좜λ ₯λœλ‹€

μœ„μ˜ μ½”λ“œλŠ” μ•„λž˜μ™€ 같이 JS엔진에 μ˜ν•΄ μ²˜λ¦¬λœλ‹€

var x //λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…, μœ„λ‘œ λŒμ–΄μ˜¬λ €μ§
console.log(x); // undefined
var x = 100;
console.log(x); // 100

var둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜λ©°, μ„ μ–ΈλΆ€κ°€ λŒμ–΄μ˜¬λ €μ§€μ§€λ§Œ 값을 λ„£μ–΄μ€€ λΆ€λΆ„(μ΄ˆκΈ°ν™” 된 λΆ€λΆ„)은 λŒμ–΄μ˜¬λ €μ§€μ§€ μ•Šμ•„ undefined둜 좜λ ₯λœλ‹€

이λ₯Ό μ‰½κ²Œ μ„€λͺ…해보면, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μ½”λ“œλ₯Ό μ­‰ λ³΄λ©΄μ„œ λͺ¨λ“  λ³€μˆ˜λ“€μ— λŒ€ν•œ 사전을 λ§Œλ“ λ‹€

예λ₯Ό λ“€μ–΄

console.log(x+y+z); // undefined
var x = 1;
var y = 10;
var z = 100;
console.log(x+y+z); //111

λΌλŠ” μ½”λ“œκ°€ μžˆμ„λ•Œ, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 λ³€μˆ˜ x,y,zλ₯Ό λ°œκ²¬ν•˜κ³  컴파일 전에 λ³€μˆ˜ 사전을 λ§Œλ“ λ‹€. μ΄λ•Œ, 값은 λ„£μ§€ μ•Šκ³  λΉ„μ›Œλ‘”λ‹€(undifined)

οΏ½type λ³€μˆ˜λͺ… κ°’
var x undefined
var y undefined
var z undefined

그리고 μ½”λ“œλ₯Ό ν•˜λ‚˜ ν•˜λ‚˜ μ‹€ν–‰μ‹œν‚€λ©΄μ„œ λ³€μˆ˜ 값을 마주칠경우 ( var x=1) 이 사전에 값을 μˆ˜μ •ν•΄μ€€λ‹€.

ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…

ν•¨μˆ˜ 선언은 ν•¨μˆ˜ 전체가 λŒμ–΄μ˜¬λ €μ§„λ‹€. λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…κ³Ό λ™μΌν•˜λ‹€

helloWorld(); // "Hello, World!" 
function helloWorld() {  
	console.log("Hello, World!");
}

μœ„μ˜ μ½”λ“œλŠ” μ•„λž˜μ™€ 같이 ν•΄μ„λœλ‹€

//ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ… (맨 μœ„λ‘œ 올라옴)
function helloWorld() {  
	console.log("Hello, World!");
} 
helloWorld(); // "Hello, World!"

ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ 경우 ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.ν•¨μˆ˜ ν‘œν˜„μ‹μ€ λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— λ³€μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…λ˜μ§€λ§Œ ν•¨μˆ˜λŠ” κ·Έλ ‡μ§€ μ•Šλ‹€.

μ£Όμ˜ν•΄μ•Ό ν•  점은, ν˜Έμ΄μŠ€νŒ…μ€ μ„ μ–ΈλΆ€λ§Œ λŒμ–΄μ˜¬λ €μ§€λ©° ν• λ‹Ή(μ΄ˆκΈ°ν™”) 뢀뢄은 μ›λž˜ μœ„μΉ˜μ—μ„œ μ‹€ν–‰λœλ‹€.

λ”°λΌμ„œ λ³€μˆ˜ μ΄ˆκΈ°ν™” 전에 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λ©΄ undefinedκ°€ λ°˜ν™˜λ  수 μžˆλ‹€.

ν•¨μˆ˜μ˜ κ²½μš°λŠ” ν•¨μˆ˜ 전체가 λŒμ–΄μ˜¬λ €μ§€λ―€λ‘œ μ„ μ–Έ 이전에 ν˜ΈμΆœν•΄λ„ μ •μƒμ μœΌλ‘œ μž‘λ™ν•œλ‹€

질문: var / let,const ν˜Έμ΄μŠ€νŒ…μ˜ 차이

letκ³Ό constλŠ” 블둝 μŠ€μ½”ν”„λ₯Ό κ°€μ§€λ©°, 블둝 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€

  • var: λ³€μˆ˜ 선언이 λŒμ–΄μ˜¬λ €μ Έμ„œ, μ„ μ–Έ 전에 λ³€μˆ˜μ— μ ‘κ·Όν•˜λ©΄ undefinedκ°€ λ‚˜μ˜¨λ‹€
console.log(a); // undefined
var a = 10; 
console.log(a); // 10

letκ³Ό const: λ³€μˆ˜ 선언이 λŒμ–΄μ˜¬λ €μ§€μ§€λ§Œ, μ„ μ–Έ μ „μ—λŠ” μ ‘κ·Όν•  수 μ—†λ‹€. μ„ μ–Έ 전에 접근을 μ‹œλ„ν•˜λ©΄ 였λ₯˜κ°€ λ‚œλ‹€

console.log(b); // ReferenceError: b is not defined 
let b = 20; 
console.log(c); // ReferenceError: c is not defined 
const c = 30;

μ™œλƒν•˜λ©΄ letκ³Ό constλŠ” 선언이 ν˜Έμ΄μŠ€νŒ…λ˜μ§€λ§Œ μ΄ˆκΈ°ν™”λŠ” ν˜Έμ΄μŠ€νŒ…λ˜μ§€ μ•ŠλŠ”λ‹€.

TDZ

μ΄λ ‡κ²Œ λ³€μˆ˜κ°€ μ„ μ–Έλœ 되고 λ‚˜μ„œλΆ€ν„° μ΄ˆκΈ°ν™”λ˜κΈ° μ „κΉŒμ§€μ˜ ꡬ간을 μΌμ‹œμ  μ‚¬κ°μ§€λŒ€(TDZ)라고 ν•œλ‹€ Temporal Dead Zone

οΏ½type λ³€μˆ˜λͺ… κ°’
οΏ½let a (λΉ„μ–΄μžˆμŒ)
let b (λΉ„μ–΄μžˆμŒ)
const c (λΉ„μ–΄μžˆμŒ)

4.5 κ°’μ˜ ν• λ‹Ή

λ³€μˆ˜μ— 값을 μ €μž₯ν•˜λŠ” 것을 ν• λ‹Ή 이라고 ν•œ λ‹€λŠ” 것은 μœ„μ—μ„œ μ–ΈκΈ‰ν–ˆλ‹€ μ΄λ•Œ, ν• λ‹Ή μ—°μ‚°μž =을 μ‚¬μš©ν•œλ‹€ 였λ₯Έμͺ½μ— μžˆλŠ” 값을 μ™Όμͺ½μœΌλ‘œ ν• λ‹Ήν•œλ‹€

var score=80;

λ˜ν•œ μœ„μ—μ„œ ν˜Έμ΄μŠ€νŒ…μ— λŒ€ν•΄ μ•Œμ•„λ³Όλ•Œ μ–ΈκΈ‰ν–ˆλ“―μ΄, λ³€μˆ˜ 선언이 ν˜Έμ΄μŠ€νŒ… λ‹¨κ³„μ—μ„œ λ¨Όμ € 이루어지고, κ°’μ˜ 할당은 λ‚˜μ€‘μ— 이루어진닀

[!note] λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό κ°’μ˜ ν• λ‹Ή λ³€μˆ˜ μ„ μ–Έκ³Ό κ°’μ˜ 할당은 2개의 문으둜 λ‚˜λˆ„μ–΄μ Έ 각각 μ‹€ν–‰λ˜λ©° μ‹€ν–‰ μ‹œμ λ„ μ„œλ‘œ λ‹€λ₯΄λ‹€. λ³€μˆ˜ 선언이 λ¨Όμ € 이루어진닀(μ΄λ•Œ 초기 할당값은 undefined)

4.6 κ°’μ˜ μž¬ν• λ‹Ή

Note

let var둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” κ°’μ˜ μž¬ν• λ‹Ήμ΄ κ°€λŠ₯ν•˜λ‹€ constλŠ” μž¬ν• λ‹Ήμ΄ λΆˆκ°€ν•˜λ©°, μ„ μ–Έμ‹œ μ΄ˆκΈ°κ°’μ„ 적어 κ·Έ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™” ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€

μ—„λ°€νžˆ λ§ν•˜λ©΄, ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ λ³€μˆ˜κ°€ 처음 μ„ μ–Έλ λ•Œ undefined둜 μ„ μ–Έλ˜κΈ°μ—, 일반적인 κ°’ 할당도 사싀은 μž¬ν• λ‹Ήμ΄λ‹€ 이 논리λ₯Ό μ μš©ν•΄λ„, ✏️note μ—μ„œ 적은 이둠이 λ˜‘κ°™μ΄ μ μš©λ˜λŠ” 것을 μ•Œ 수 μžˆλ‹€

ν• λ‹Ήκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ, μž¬ν• λ‹Ήμ‹œ λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ λ°”λ€λ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€ undefined, 80 처럼 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 값은 ==κ°€λΉ„μ§€ μ½œλ ‰ν„°μ— μ˜ν•΄ λ©”λͺ¨λ¦¬μ—μ„œ μžλ™ν•΄μ œ λœλ‹€== 단! λ©”λͺ¨λ¦¬μ—μ„œ μ–Έμ œ ν•΄μ œλ˜λŠ”μ§€λŠ” λͺ¨λ₯Έλ‹€

jsκ°œλ°œμžκ°€ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ΄μš©ν•΄ 값에 μ ‘κ·Όν•˜λ©΄ μ•ˆ λœλ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ κΈ°μ–΅ν•˜κ³  λ„˜μ–΄κ°€μž

[!note] unmanaged lang VS managed lang

unmanaged language

C와 같이 κ°œλ°œμžκ°€ λͺ…μ‹œμ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή, ν•΄μ œ ν•  수 μžˆλŠ” μ–Έμ–΄λ₯Ό unmanaged language 라고 ν•œλ‹€

managed language

μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ 같이 κ°œλ°œμžκ°€ 직접 λ©”λͺ¨λ¦¬ μ œμ–΄λ₯Ό ν•  수 μ—†κ³ , κ°€λΉ„μ§€ μ½œλ ‰ν„°κ°€ μžλ™μœΌλ‘œ μ œμ–΄ν•΄μ£ΌλŠ” 것을 managed language 라고 ν•œλ‹€

![[Screenshot 2024-07-17 at 5.15.19 PM 1.png]] ![[Screenshot 2024-07-17 at 6.55.26 PM.png]]

κ°€λΉ„μ§€ 컬렉터

κ°€λΉ„μ§€ μ»¬λ ‰ν„°λŠ” λ‹€μŒκ³Ό 같은 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ μž‘λ™ν•œλ‹€

  • μ°Έμ‘° μΉ΄μš΄νŒ…(Reference Counting): 객체가 μ°Έμ‘°λ˜λŠ” 횟수λ₯Ό μΆ”μ ν•˜κ³ , μ°Έμ‘° νšŸμˆ˜κ°€ 0이 되면 λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•©λ‹ˆλ‹€.
  • 마크 μ•€ μŠ€μœ•(Mark-and-Sweep): 루트 κ°μ²΄μ—μ„œ μ‹œμž‘ν•˜μ—¬ 도달 κ°€λŠ₯ν•œ λͺ¨λ“  객체λ₯Ό λ§ˆν¬ν•˜κ³ , λ§ˆν¬λ˜μ§€ μ•Šμ€ κ°μ²΄λŠ” λ©”λͺ¨λ¦¬μ—μ„œ μ œκ±°ν•©λ‹ˆλ‹€.

4.7 μ‹λ³„μž 넀이밍 κ·œμΉ™

μ‹λ³„μž κ·œμΉ™

μ•žμ„œ μ„€λͺ…ν–ˆλ“―이, μ‹λ³„μžλž€, μ–΄λ–€ 값을 κ΅¬λΆ„ν•˜μ—¬ 식별 ν•  수 μžˆλŠ” 이름을 μ˜λ―Έν•œλ‹€ μ‹λ³„μž 이름을 μ§€μ„λ•Œ, κ·œμΉ™μ΄ μ‘΄μž¬ν•œλ‹€

  1. 문자, 숫자, μ–Έλ”μŠ€μ½”μ–΄(_), λ‹¬λŸ¬κΈ°ν˜Έ$ 둜만 이루어져야 ν•œλ‹€
  2. 단, 숫자둜 μ‹œμž‘ν•  μˆ˜λŠ” μ—†λ‹€
  3. μ˜ˆμ•½μ–΄λŠ” μ‹λ³„μžλ‘œ μ‚¬μš©ν•  수 μ—†λ‹€

μ˜ˆμ•½μ–΄

μ˜μ–΄ μ΄μ™Έμ˜ λ‹€λ₯Έ μ–Έμ–΄λ‘œ 이루어진 μ‹λ³„μž: ν•œκΈ€ μ‹λ³„μž

ES5λΆ€ν„° μ‹λ³„μžλ₯Ό λ§Œλ“€ λ•Œ μœ λ‹ˆμ½”λ“œ 문자λ₯Ό ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ— ν•œκΈ€, 일본어 μ‹λ³„μžλ„ μ‚¬μš©ν•  수 μžˆλ‹€ μ±…μ—μ„œλŠ” ν•œκΈ€ μ‹λ³„μžλ₯Ό λΉ„μΆ”μ²œ ν–ˆλ‹€

ν•œνŽΈ ν† μŠ€μ—μ„œλŠ” ν•œκΈ€λ‘œ μ§“λŠ” λ³€μˆ˜λ₯Ό μ§“λŠ” μ„Έμ’…λŒ€μ™• ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•œ 적이 μžˆλ‹€ κ΄€λ ¨ κ²Œμ‹œλ¬Ό: μ„Έμ’…λŒ€μ™• ν”„λ‘œμ νŠΈ

(μ•„μ§κΉŒμ§€ μ‚¬μš©ν•˜λŠ”μ§€λŠ” λͺ¨λ₯΄κ² λ‹€)

넀이밍 μ»¨λ²€μ…˜

λŒ€ν‘œμ μœΌλ‘œ 4κ°€μ§€ μœ ν˜•μ˜ 넀이밍 μ»¨λ²€μ…˜μ΄ μžˆλ‹€

카멜 μΌ€μ΄μŠ€

let devoceanYoung; μ†Œλ¬ΈμžλŒ€λ¬Έμž

μŠ€λ„€μ΄ν¬ μΌ€μ΄μŠ€

let devocean_young; μ†Œλ¬Έμž_μ†Œλ¬Έμž

파슀칼 μΌ€μ΄μŠ€

let DevoceanYoung; λŒ€λ¬ΈμžλŒ€λ¬Έμž

헝가리언 μΌ€μ΄μŠ€

let strDevoceanYoung; νƒ€μž…λŒ€λ¬ΈμžλŒ€λ¬Έμž

일반적으둜 λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ 이름에 카멜 μΌ€μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κ³  μƒμ„±μž ν•¨μˆ˜, 클래슀 이름에 파슀칼 μΌ€μ΄μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€