🐸 [JavaScript] ν‘œν˜„μ‹κ³Ό λ¬Έ

hnyoojinΒ·2024λ…„ 8μ›” 24일

🐸 JS λ§ˆμŠ€ν„° 되기

λͺ©λ‘ 보기
4/19
post-thumbnail

μ•ž μž₯μ—μ„œ, λ³€μˆ˜μ— λŒ€ν•΄ μ‚΄νŽ΄λ΄€λ‹€.

λ§Œμ•½ λˆ„κ΅°κ°€κ°€ 'λ³€μˆ˜μ— μ €μž₯ν•˜λŠ” κ°’μ΄λΌλŠ” 게 뭐냐'κ³  물어보면, 뭐라고 λ‹΅ν•  것인가?

μ€‘μš”ν•œ κ°œλ…μ΄λ‹ˆ, λΆ„λͺ…ν•˜κ²Œ μ„€λͺ…ν•  수 μžˆμ–΄μ•Όν•œλ‹€.

κ°’

κ°’μ΄λΌλŠ”κ±΄, 식(ν‘œν˜„μ‹)이 ν‰κ°€λ˜μ–΄ μƒμ„±λœ 결과이닀.

λ­”κ°€,, μƒμ†Œν•œ μ •μ˜μ΄λ‹€.

μ—¬κΈ°μ„œ λ§ν•˜λŠ” κ°’, μ‹μ΄λΌλŠ”κ±΄ 뭐고,, 또 ν‰κ°€λœλ‹€λŠ” 건, μƒμ„±λœλ‹€λŠ” 건 뭘까?

ν•˜λ‚˜ν•˜λ‚˜ λœ―μ–΄μ„œ 값을 μ™„λ²½ν•˜κ²Œ μ΄ν•΄ν•΄λ³΄μž.

1. κ°’

λͺ¨λ“  값은 data type을 κ°€μ§„λ‹€.

data type이 μ€‘μš”ν•œ μ΄μœ λŠ” 뭘까?

λͺ¨λ“  값듀은, λ©”λͺ¨λ¦¬μ— bit의 ν˜•νƒœλ‘œ λ‚˜μ—΄λœλ‹€.

μš°λ¦¬κ°€ 이 값듀을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ”, λ©”λͺ¨λ¦¬μ— μžˆλŠ” bit ν˜•νƒœμ˜ 값듀을 해석해야 ν•œλ‹€.

μ΄λ•Œ data type에 따라 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ ν•΄μ„λ˜κΈ° λ•Œλ¬Έμ—! 맀우 μ€‘μš”ν•˜λ‹€..

2. κ°’μ˜ 생성

식(ν‘œν˜„μ‹)이 ν‰κ°€λ˜μ–΄ 생성 된 κ²°κ³Ό

κ°’μ΄λΌλŠ” 건, λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ μƒμ„±λœλ‹€.

사싀 κ°€μž₯ 기본적인 방법은 λ¦¬ν„°λŸ΄(literal)을 μ‚¬μš©ν•˜λŠ” 방법이닀.

  • literal
    : μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 문자 λ˜λŠ” μ•½μ†λœ 기호λ₯Ό μ‚¬μš©ν•΄μ„œ 값을 μƒμ„±ν•˜λŠ” ν‘œκΈ°λ²•μ΄λ‹€.

μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 아라비아 숫자, μ•ŒνŒŒλ²³, ν•œκΈ€ λ“±μ˜ 문자
λ˜λŠ” μ•½μ†λœ 기호인 "", '', [], {}, // 등을 μ‚¬μš©ν•΄μ„œ 값을 μƒμ„±ν•œλ‹€λŠ” 것이닀.

μš°λ¦¬κ°€ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  λ•Œ μž‘μ„±ν•˜λŠ” 3은, 아라비아 숫자 3이 μ•„λ‹Œ 숫자 λ¦¬ν„°λŸ΄ 이며, 이것을 μ½”λ“œμ— κΈ°λ‘ν•˜λ©΄ JavaScript 엔진이 이λ₯Ό ν‰κ°€ν•΄μ„œ λ©”λͺ¨λ¦¬μ— 숫자 3을 μƒμ„±ν•΄λ‚΄λŠ” 것이닀.

즉, 아라비아 숫자 3은 μ‚¬λžŒμ„ μœ„ν•œ ν‘œκΈ° 방식일 뿐이고, μ½”λ“œ 상에 ν‘œκΈ°λœ 숫자 λ¦¬ν„°λŸ΄μ΄ μ‹€ν–‰λ˜λ©΄? μ‹€μ œ 숫자 κ°’μœΌλ‘œ λ³€ν™˜λœλ‹€.

3. 평가

식(ν‘œν˜„μ‹)이 평가 λ˜μ–΄ μƒμ„±λœ κ²°κ³Ό

ν‰κ°€λΌλŠ” 건 κ°„λ‹¨ν•˜λ‹€.

식을 ν•΄μ„ν•΄μ„œ, 값을 μƒμ„±ν•˜κ±°λ‚˜ μ°Έμ‘°(κ°„λ‹¨νžˆ λ§ν•˜λ©΄ μ‚¬μš©)ν•˜λŠ” 것.



ν‘œν˜„μ‹

식(ν‘œν˜„μ‹) 이 ν‰κ°€λ˜μ–΄ μƒμ„±λœ κ²°κ³Ό

κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” λ¬Έ(statement)λ₯Ό λ§ν•œλ‹€.

μ„€λͺ…보단 μ½”λ“œκ°€ 이해가 μ‰¬μšΈ 것 κ°™λ‹€.

let score = 100;      // (1)

let score = 50 + 50;  // (2)

score;                // (3)

(1)
μ—¬κΈ°μ„œ 100은, λ¦¬ν„°λŸ΄μ΄λ‹€. κ·ΈλŸ¬λ‹ˆκΉŒ 100이 JavaScript 엔진에 μ˜ν•΄μ„œ ν‰κ°€λ˜μ–΄ 값을 μƒμ„±ν•œλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λ¦¬ν„°λŸ΄μ€ 평가식이닀.

(2)
λ¦¬ν„°λŸ΄κ³Ό μ—°μ‚°μžκ°€ μž‘μ„±λœ μš°λ³€μ—μ„œ μˆ«μžκ°’ 100을 μƒμ„±ν•œλ‹€. (1)μ—μ„œ μ‚΄νŽ΄λ΄€λ“― 100은 λ¦¬ν„°λŸ΄, 즉 ν‘œν˜„μ‹μ΄λ‹€.

(3)
λ³€μˆ˜ μ‹λ³„μžλ₯Ό μ°Έμ‘°ν•˜λŠ” μ½”λ“œμ΄λ©°, λ³€μˆ˜ κ°’μœΌλ‘œ ν‰κ°€λœλ‹€. μ‹λ³„μž μ°Έμ‘°λŠ” 값을 μƒμ„±ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ κ°’μœΌλ‘œ ν‰κ°€λ˜κΈ° λ•Œλ¬Έμ— ν‘œν˜„μ‹μ΄λ‹€.

정리가 μ’€ λ˜λŠ”κ°€?

ν•œλ§ˆλ””λ‘œ μ •λ¦¬ν•˜μžλ©΄, κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” λͺ¨λ“  statementλŠ” ν‘œν˜„μ‹μ΄λ‹€.


μ—¬κΈ°μ—μ„œ μ„€λͺ…을 쑰금 덧뢙여보겠닀.

ν‘œν˜„μ‹κ³Ό ν‘œν˜„μ‹μ€ λ™μΉ˜(equivalent)이닀.

κ·ΈλŸ¬λ‹ˆκΉŒ μˆ˜μ‹ 1 + 2 = 3 μ—μ„œ 1 + 2와 3은 κ°™λ‹€κ³  ν•  수 μžˆλ‹€.

ν‘œν˜„μ‹μ„ κ°’μ²˜λŸΌ μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ΄λ©°, λ¬Έλ²•μ μœΌλ‘œ 값이 μœ„μΉ˜ν•  수 μžˆλŠ” μžλ¦¬μ—λŠ” ν‘œν˜„μ‹μ΄ λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

λ‹€λ₯Έ ν‘œν˜„μ‹μ˜ 일뢀가 λ˜μ–΄ μƒˆλ‘œμš΄ 값을 λ§Œλ“€μ–΄λ‚Ό μˆ˜λ„ μžˆλ‹€.

길게 λ§ν–ˆμ§€λ§Œ 결둠은, ν‘œν˜„μ‹μ€ κ°’μ²˜λŸΌ μ‚¬μš©ν•œλ‹€ λŠ” 것이닀.


λ¬Έ

κ·Έλ ‡λ‹€λ©΄ 이제 λ¬Έκ³Ό ν‘œν˜„μ‹μ„ κ΅¬λΆ„ν•΄λ³΄μž.

λ¬Έμ΄λž€, ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” κΈ°λ³Έλ‹¨μœ„μ΄μž μ΅œμ†Œλ‹¨μœ„μ΄λ‹€.

ν”„λ‘œκ·Έλž˜λ°μ€ 문을 μž‘μ„±ν•˜κ³ , 이λ₯Ό μˆœμ„œμ— 맞게 λ‚˜μ—΄ν•˜λŠ” ν–‰μœ„μ΄λ‹€.

이 문은 μ—¬λŸ¬ token으둜 κ΅¬μ„±λœλ‹€.

tokenμ΄λΌλŠ” 건, 문법적 μ΅œμ†Œ λ‹¨μœ„μ΄λ‹€.

let sum = 1 + 2; λΌλŠ” μ½”λ“œλ₯Ό token λ‹¨μœ„λ‘œ λ‚˜λˆ„μžλ©΄
let, sum, =, 1, +, 2, ; μ΄λ ‡κ²Œ λ‚˜λˆŒ 수 μžˆλ‹€.

λ¬Έμ΄λΌλŠ” 건, λͺ…령문이라고도 ν•œλ‹€.

μ»΄ν“¨ν„°μ—κ²Œ λ‚΄λ¦¬λŠ” λͺ…λ Ήμ΄λΌλŠ” μ˜λ―Έμ΄λ‹€.

문의 μ’…λ₯˜λ‘œλŠ” μ„ μ–Έλ¬Έ, ν• λ‹Ήλ¬Έ, 쑰건문, 반볡문 등이 μžˆλ‹€.

JavaScript 엔진은 μ„Έλ―Έμ½œλ‘  ;둜 문의 μ’…λ£Œλ₯Ό νŒŒμ•…ν•œλ‹€.

; λ₯Ό 톡해 순차적으둜 ν•˜λ‚˜μ”© 문을 μ‹€ν–‰ν•œλ‹€.

κ·ΈλŸ¬λ‹ˆ μ›¬λ§Œν•˜λ©΄ ; 을 뢙여주도둝 ν•˜μž

사싀... JavaScript 엔진은 ;이 없어도 μ†ŒμŠ€μ½”λ“œλ₯Ό 해석 κ³Όμ •μ—μ„œ 'μ–΄ μ΄μ―€μ—μ„œ 문이 λλ‚œκ±°κ°™μ€λ°?' μ‹ΆμœΌλ©΄ κ·Έ 지점에 μžλ™μœΌλ‘œ ; 을 λΆ™μ—¬μ£Όκ³ , 이λ₯Ό ASI라고 ν•œλ‹€.

κ·Έλž˜μ„œ ;λ₯Ό 뢙이지 말자고 μ£Όμž₯ν•˜λŠ” 이듀도 μžˆμ§€λ§Œ,, μš°λ¦¬λŠ” 뢙여주도둝 ν•˜μž.


κ·Έλ‚˜μ €λ‚˜ λ¬Έκ³Ό ν‘œν˜„μ‹μ„ κ΅¬λΆ„ν•˜μžκ³  ν–ˆλŠ”λ° 문을 μ„€λͺ…ν•˜λ‹€κ°€ λ„ˆλ¬΄ 멀리 온 것 κ°™λ‹€.

  • ν‘œν˜„μ‹μΈ λ¬Έ
    ν‘œν˜„μ‹μ€ 문의 일뢀일 μˆ˜λ„ 있고, κ·Έ 자체둜 문이 될 μˆ˜λ„ μžˆλ‹€.
    이λ₯Ό κ΅¬λ³„ν•˜κΈ° μœ„ν•œ κ°€μž₯ κ°„λ‹¨ν•œ 방법은 λ³€μˆ˜μ— ν• λ‹Ήν•΄λ³΄λŠ” 것이닀.
    κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” λ¬Έ, 할당문이라면 ν‘œν˜„μ‹μΈ λ¬Έ 일 것이닀.

  • ν‘œν˜„μ‹μ΄ μ•„λ‹Œ λ¬Έ
    λ³€μˆ˜μ— ν• λ‹Ήν•  수 μ—†λŠ”, λ³€μˆ˜μ„ μ–Έλ¬Έκ³Ό 같은 문이닀.
    chrome 개발자 λ„κ΅¬μ—μ„œ ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문을 μ‹€ν–‰ν•˜λ©΄, 항상 undefinedλ₯Ό 좜λ ₯ν•˜κ³ , 이λ₯Ό μ™„λ£Œκ°’μ΄λΌκ³  ν•œλ‹€.
    이 undefinedλŠ” 평가 κ²°κ³Όκ°€ μ•„λ‹ˆλ©°, λ³€μˆ˜μ— ν• λ‹Ήν•˜κ±°λ‚˜ μ°Έμ‘°ν•  수 μ—†λ‹€.


κ°’κ³Ό ν‘œν˜„μ‹ 이런 κ°œλ…μ„ 깊게 생각해본 적이 μ—†μ—ˆλŠ”λ° 정리할 수 μžˆλŠ” κΈ°νšŒκ°€ 된 것 κ°™μ•„ λ§Œμ‘±μŠ€λŸ½λ‹€!

0개의 λŒ“κΈ€