all is well!!

[ํ•ญํ•ด99 3์ฃผ์ฐจ] React ์ž…๋ฌธ์ฃผ์ฐจ S.A. ๋ณธ๋ฌธ

weekly ํšŒ๊ณ ๋ก

[ํ•ญํ•ด99 3์ฃผ์ฐจ] React ์ž…๋ฌธ์ฃผ์ฐจ S.A.

tnqlscho 95 2022. 7. 1. 20:08

๐ŸŒ™ JavaScript์˜ ์ž๋ฃŒํ˜•๊ณผ JavaScript๋งŒ์˜ ํŠน์„ฑ์€ ๋ฌด์—‡์ผ๊นŒ ?

1. ๋А์Šจํ•œ ํƒ€์ž…(loosely typed)์˜ ๋™์ (dynamic) ์–ธ์–ด

JavaScript๋Š” ํƒ€์ž…์ด '๋งค์šฐ ์œ ์—ฐํ•œ ์–ธ์–ด'๋กœ ๋А์Šจํ•œ ํƒ€์ž…(loosely typed)์˜ ๋™์ (dynamic) ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

JavaScript์˜ ๋ณ€์ˆ˜๋Š” ๊ฐ’์ด ์–ด๋–ค ํ˜•์‹์— ๊ฐ•์ œ๋กœ ๋ฌถ์—ฌ์žˆ์ง€์•Š๊ณ , ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ ํ• ๋‹น / ์žฌํ• ๋‹น ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

ex) Subin์ด๋ผ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์— ๋”ฐ๋ผ ์ˆซ์ž / ๋ฌธ์ž์—ด / ๋ถˆ๋ฆฌ์–ธ์œผ๋กœ ํ• ๋‹น ๋ฐ ์žฌํ• ๋‹น ๊ฐ€๋Šฅ.

let Subin = 28  //์ˆซ์ž

Subin = '๋ฏธ๋ž˜์˜ ํ”„๋ก ํŠธ์—”๋“œ'  //๋ฌธ์ž์—ด

Subin = true  //๋ถˆ๋ฆฌ์–ธ

 

2. JavaScript ํ˜•๋ณ€ํ™˜

ํ˜•๋ณ€ํ™˜์€ ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜(explicit coercion)๊ณผ ์•”์‹œ์  ํ˜•๋ณ€ํ™˜(implicit coercion)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

*๋ช…์‹œ์  ๋ณ€ํ™˜(explicit coercion)

๋ช…์‹œ : ๋‚ด์šฉ์ด๋‚˜ ๋œป์„ ๋ถ„๋ช…ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ด ๋ณด์ด๋Š”. ๋˜๋Š” ๊ทธ๋Ÿฐ ๊ฒƒ'์„ ์˜๋ฏธ.

Number("123") ์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ฝ”๋“œ์—์„œ ์ž๋ฃŒํ˜•์„ ์ •ํ•ด์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

 

*์•”์‹œ์  ํ˜•๋ณ€ํ™˜(implicit coercion)

์—ฐ์‚ฐ์ž ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์ž์—ฐ์ ์œผ๋กœ ์ผ์–ด๋‚˜๋Š” ํ˜•๋ณ€ํ™˜์ž…๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์—ฐ์‚ฐ์ž๋กœ๋Š”  ==, +, > ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

์—ฌ๊ธฐ์„œ ์˜ˆ์™ธ๋กœ ===๋Š” ํ˜•๋ณ€ํ™˜์„ ์ผ์œผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒŒ ==์™€ ===์˜ ์ฐจ์ด์  ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

[์—ฌ๊ธฐ์„œ ์•Œ์•„๋ณด๋Š” = / == / ===์˜ ์ฐจ์ด]

 
// = : ๋Œ€์ž… ์—ฐ์‚ฐ์ž
// == : ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž / ๊ฐ’์ด ๊ฐ™์€๊ฐ€?
// === : ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž / ์—„๊ฒฉํ•˜๊ฒŒ ๊ฐ™์€๊ฐ’์ธ๊ฐ€? (๋ฐ์ดํ„ฐ ํƒ€์ž…๊นŒ์ง€ ๊ฐ™์•„์•ผ ๋จ.)

         var num1=9;
         var num2="9";
         var result = (num1==num2)
         document.write(result,"<br>")//true
         
         //์—ฌ๊ธฐ์„œ num1๊ณผ num2๊ฐ€ ๊ฐ™์„๊นŒ์š”?
         //์›๋ž˜๋Š” ๋‹ค๋ฅด๊ฒŒ ๋‚˜์™€์•ผ๋ ๊ฑฐ ๊ฐ™์€๋ฐ..??
         //์™œ๋ƒ๋ฉด ์ •์ˆ˜9๋ž‘ ๋ฌธ์ž"9"๋Š” ๋ถ„๋ช…ํžˆ ๋‹ค๋ฅด๋‹ˆ๊นŒ์š”!
         
         //ํ•˜์ง€๋งŒ ==๋ฅผ ์จ์„œ ๊ฐ’๋งŒ ๊ฐ™์œผ๋ฉด ๊ฐ™๋‹ค๊ณ  ์ธ์‹์„ ํ•ด์„œ
         //9๋ž‘ "9" ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๋‹ค๋ฅด์ง€๋งŒ, true ์ž…๋‹ˆ๋‹ค.
         //"9"๋ฅผ ํ˜•๋ณ€ํ™˜ ํ•œ๋‹ค๋ฉด 9๋ž‘ ๊ฐ™์•„์งˆํ…Œ๋‹ˆ๊นŒ ๊ฐ’์€ ๊ฐ™๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.
         
         result = (num1===num2)//false
         document.write(result,"<br>")//false
         //num1๊ณผ num2๊ฐ€ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฐ™์€๊ฐ€?
         //===์€ ๊ฐ’๋ฟ๋งŒ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ ํƒ€์ž…(๋ฌธ์ž์—ด์ธ์ง€ ์ˆซ์ž์ธ์ง€...)๊นŒ์ง€ ๊ฐ™์•„์•ผ true์ž…๋‹ˆ๋‹ค.

js์—์„œ ํ˜•๋ณ€ํ™˜์€ String / Number / Boolean 3๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค.

 

* String conversion / conversion(๋ณ€ํ™˜)

String()์€ ์ˆซ์ž์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜๋กœ ์ฝ”๋“œ์—์„œ ์ง์ ‘ ์ž๋ฃŒํ˜•์„ ์ •ํ•ด์ฃผ๋Š”

๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜์œผ๋กœ ์“ฐ๊ณ ์‹ถ์„๋•Œ ์”๋‹ˆ๋‹ค.

 

* Boolean conversion

Boolean()์€ ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜์œผ๋กœ ์“ฐ๊ณ ์‹ถ์„๋•Œ ์”๋‹ˆ๋‹ค.

์•”์‹œ์ ์œผ๋กœ๋Š” true false๋ฅผ ๊ฐ€๋ฅด๋Š” ๊ฒƒ์ด๊ธฐ์— ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž๋“ค ( ||(or), &&, ! )์— ์˜ํ•ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

||(or)์™€ &&(and)๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ์‹ค์ œ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํ˜•๋ณ€ํ™˜์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

[์—ฌ๊ธฐ์„œ ์•Œ์•„๋ณด๋Š” ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž]

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž:๋…ผ๋ฆฌ ๊ฐ€์ง€๊ณ  ์—ฐ์‚ฐํ•˜๋Š” ์—ฐ์‚ฐ์ž

&& , || , !
|| - ์‰ฌํ”„ํŠธ+๋ฐฑ์ŠคํŽ˜์ด์Šค๋ฐ‘์—
&& - ๋…ผ๋ฆฌ AND
|| - ๋…ผ๋ฆฌ OR
! - ๋…ผ๋ฆฌ NOT

* Number conversion

Number()์€ ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜์œผ๋กœ ์“ฐ๊ณ ์‹ถ์„๋•Œ ์”๋‹ˆ๋‹ค.

์•”์‹œ์ ์œผ๋กœ๋Š” ๋งŽ์ด ๋ถˆ๋ฆฌ๋Š”๋ฐ

1. ๋น„๊ต ์—ฐ์‚ฐ์ž (>, <, <=, >=, !=, ==) (๋‹จ, ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋ชจ๋‘ String์ผ ๋•Œ๋Š” ์ œ์™ธ)

2. ๋น„ํŠธ ์—ฐ์‚ฐ์ž (|, &, ^, ~)

3. ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž (-, +, *, /, %) (๋‹จ, +์˜ ์—ฐ์‚ฐ์ž์— String์ด ์žˆ์„ ๋•Œ๋Š” ์ œ์™ธ)

4. ๋‹จํ•ญ ์—ฐ์‚ฐ์ž (+)

์ด๋ ‡๊ฒŒ ์ •๋ฆฌ๋  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

3. ๋А์Šจํ•œ ํƒ€์ž…(loosely typed)์˜ ๋™์ (dynamic) ์–ธ์–ด์˜ ๋ฌธ์ œ์ ๊ณผ ๋ณด์™„๋ฐฉ๋ฒ•

์•ž์—์„œ ๋งํ–ˆ๋“ฏ์ด ์œ ์—ฐํ•œ ์–ธ์–ด์ด๊ธฐ์— ์‹คํ–‰ ๋„์ค‘์— ๋ณ€์ˆ˜์— ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํƒ€์ž…์ด ๋“ค์–ด์™€ ํƒ€์ž…์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋™์ ํƒ€์ž… ์–ธ์–ด๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ ํ™•์ธํ•  ์ˆ˜ ๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ”๋“œ๊ฐ€ ๊ธธ๊ณ  ๋ณต์žกํ•ด์งˆ ๊ฒฝ์šฐ ํƒ€์ž… ์—๋Ÿฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ ์ง‘๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ทธ ๋ณด์™„๋ฐฉ๋ฒ•์œผ๋กœ

TypeScipt๋‚˜ Flow ๋“ฑ์„ ์”๋‹ˆ๋‹ค.

 

4. undefined์™€ null์˜ ๋ฏธ์„ธํ•œ ์ฐจ์ด

* undefined

‘์•„๋ฌด ๊ฐ’๋„ ํ• ๋‹น๋ฐ›์ง€ ์•Š์€ ์ƒํƒœ’๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์•”๋ฌต์ ์œผ๋กœ undefined๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์„ ์–ธ์— ์˜ํ•ด ๊ฐ’์„ ๋„ฃ์„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ฒ˜์Œ ํ• ๋‹น์ด ์ด๋ค„์งˆ ๋•Œ๊นŒ์ง€ ๋นˆ ์ƒํƒœ๋กœ ๋‚ด๋ฒ„๋ ค๋‘์ง€ ์•Š๊ณ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด 'undefined'๋กœ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ์ดํ›„ ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ฉด undefined๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

 

*null

‘๋น„์–ด์žˆ๋Š”, ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’'(๊ฐ’์˜ ๋ถ€์žฌ)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜์— null์„ ํ• ๋‹น์„ ํ•˜๋ฉด ๋ณ€์ˆ˜๊ฐ€ ์ด์ „์— ์ฐธ์กฐํ•˜๋˜ ๊ฐ’์„ ๋” ์ด์ƒ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ๋งํ•ด์„œ ์ด์ „์— ํ• ๋‹น๋˜์–ด ์žˆ๋˜ ๊ฐ’์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ null์€ ๋ณ€์ˆ˜์— ๊ฐ’์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋„์ ์œผ๋กœ ๋ช…์‹œ(์˜๋„์  ๋ถ€์žฌ)ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

๐ŸŒ™ JavaScript ๊ฐ์ฒด์™€ ๋ถˆ๋ณ€์„ฑ์ด๋ž€ ?

1. ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์™€ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ

*๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ(Primative Type)

๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ๋Š” ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ

Number, String, Boolean, Null, Undefined

๋กœ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
๊ฐ’์„ ๊ทธ๋Œ€๋กœ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๊ณ ์ •๋œ ํฌ๊ธฐ๋กœ ์ €์žฅ๋˜๋ฉฐ ์›์‹œ ๋ฐ์ดํ„ฐ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณด๊ด€ํ•ด์„œ ๋ถˆ๋ณ€์„ฑ ์ž…๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.(์žฌ์‚ฌ์šฉ)

 

*์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ(Reference Type)

์ฐธ์กฐ ํƒ€์ž…์€ ๋ณ€์ˆ˜์— ํ• ๋‹นํ• ๋•Œ ๊ฐ’์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ์ธ ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ๋Š” ๊ธฐ์กด์˜ ๊ฐ์ฒด๋„ ๋ณ€ํ•ด์„œ ๊ฐ€๋ณ€์„ฑ ์ž…๋‹ˆ๋‹ค.

์ฐธ์กฐํ˜•์€ ๊ธฐ๋ณธํ˜• ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋Š” ๊ฐ’์ด ์ง€์ •๋œ ์ฃผ์†Œ๊ฐ’์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

 

2. ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ  ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

๋ถˆ๋ณ€ ๊ฐ์ฒด๋ž€ ํ•œ ๋ฒˆ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด, ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์„œ, ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์›๋ณธ๊ฐ์ฒด๋Š” ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„๋•Œ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

[ ๊ฐ์ฒด์— ๋ณ€ํ™”๋ฅผ ๊ฐ€ํ•ด๋„ ์›๋ณธ์ด ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
ex) ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ์—ˆ์œผ๋ฉด ์•Œ๋ฆผ ์ „์†กํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฐ”๋€Œ๊ธฐ ์ „์˜ ์ •๋ณด์™€ ๋ฐ”๋€ ํ›„์˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ ๋“ฑ]

 

๋ถˆ๋ณ€๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ์กด ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฒƒ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ฝ”๋”ฉ์˜ ์–‘์ด ๋งŽ์•„์ง€๊ณ  ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜๊ณ ๋ฅผ ๋œ๊ธฐ์œ„ํ•ด
ํ”„๋กœํผํ‹ฐ ๊ฐœ์ˆ˜์— ์ƒ๊ด€ ์—†์ด ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š”๊ฒƒ์—๋Š” ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3.  ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ

์–•์€ ๋ณต์‚ฌ๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’(์ฃผ์†Œ ๊ฐ’)์„ ๋ณต์‚ฌํ•˜๊ณ , ๊นŠ์€ ๋ณต์‚ฌ๋Š” ๊ฐ์ฒด์˜ ์‹ค์ œ ๊ฐ’์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

*์–•์€ ๋ณต์‚ฌ

๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ, ํ•ด๋‹น ๊ฐ์ฒด๋งŒ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ณต์‚ฌ๋œ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ์›๋ณธ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ

ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜ ๊ฐ’ ์—ญ์‹œ ๋™์ผํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

 

*๊นŠ์€ ๋ณต์‚ฌ

๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ํ•ด๋‹น ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊นŒ์ง€ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•จ์œผ๋กœ์จ ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๐ŸŒ™  ํ˜ธ์ด์ŠคํŒ…๊ณผ TDZ๋Š” ๋ฌด์—‡์ผ๊นŒ?

1. ์Šค์ฝ”ํ”„, ํ˜ธ์ด์ŠคํŒ…, TDZ

*์Šค์ฝ”ํ”„(Scope)

Scope๋ฅผ ์šฐ๋ฆฌ๋ง๋กœ ๋ฒˆ์—ญํ•˜๋ฉด ‘๋ฒ”์œ„’๋ผ๋Š” ๋œป์œผ๋กœ ์Šค์ฝ”ํ”„(Scope)๋ž€ ‘๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„'์ž…๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  ์Šค์ฝ”ํ”„๋Š” global(์ „์—ญ)๊ณผ local(์ง€์—ญ) 2๊ฐ€์ง€ ํƒ€์ž…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ „์—ญ ์Šค์ฝ”ํ”„(Global Scope)๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ „์—ญ์— ์„ ์–ธ๋˜์–ด์žˆ์–ด ์–ด๋А ๊ณณ์—์„œ๋“ ์ง€ ํ•ด๋‹น ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์—ญ ์Šค์ฝ”ํ”„(Local Scope)๋Š” ํ•ด๋‹น ์ง€์—ญ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ์ง€์—ญ์„ ๋ฒ—์–ด๋‚œ ๊ณณ์—์„  ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

*ํ˜ธ์ด์ŠคํŒ…(Hoisting)

ํ•จ์ˆ˜ ์•ˆ์— ์žˆ๋Š” ์„ ์–ธ๋“ค์„ ๋ชจ๋‘ ๋Œ์–ด์˜ฌ๋ ค์„œ ํ•ด๋‹น ํ•จ์ˆ˜ ์œ ํšจ ๋ฒ”์œ„์˜ ์ตœ์ƒ๋‹จ์— ์„ ์–ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ

ํ•จ์ˆ˜ ๋‚ด์—์„œ ์•„๋ž˜์ชฝ์— ์กด์žฌํ•˜๋Š” ๋‚ด์šฉ ์ค‘ ํ•„์š”ํ•œ ๊ฐ’๋“ค์„ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ ์ฝ”๋“œ๊ฐ€ ๋Œ์–ด์˜ฌ๋ ค์ง€๋Š” ๊ฑด ์•„๋‹ˆ๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Parser ๋‚ด๋ถ€์ ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” ๋ณ€ํ™”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

*TDZ

TDZ(Temporal Dead Zone) ๋ž€, ํ•œ๊ธ€๋กœ ์ง์—ญํ•˜์ž๋ฉด ์ผ์‹œ์ ์ธ ์‚ฌ๊ฐ์ง€๋Œ€๋ž€ ๋œป์ž…๋‹ˆ๋‹ค.

์ด ์ผ์‹œ์ ์ธ ์‚ฌ๊ฐ์ง€๋Œ€๋Š” ์Šค์ฝ”ํ”„์˜ ์‹œ์ž‘ ์ง€์ ๋ถ€ํ„ฐ ์ดˆ๊ธฐํ™” ์‹œ์ž‘ ์ง€์ ๊นŒ์ง€์˜ ๊ตฌ๊ฐ„์„ TDZ(Temporal Dead Zone) ๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

 

2. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ๊ณผ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ ํ˜ธ์ด์ŠคํŒ… ๋ฐฉ์‹์˜ ์ฐจ์ด

ํ•จ์ˆ˜ ์„ ์–ธ์‹์€ ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ–ฅ์„ ๋ฐ›์ง€๋งŒ, ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ˜ธ์ด์ŠคํŒ…์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

3. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ์ฝœ ์Šคํƒ

*์‹คํ–‰์ปจํ…์ŠคํŠธ(Execution Context)

์‹คํ–‰ํ•  ์ฝ”๋“œ์— ์ œ๊ณตํ•  ํ™˜๊ฒฝ ์ •๋ณด๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์ฝ”๋“œ๋Š” ํŠน์ •ํ•œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์•ˆ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฃผ์š”ํ•œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์—๋Š” Global Execution Context์™€ Fuction Execution Context๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Global Execution Context

๋””ํดํŠธ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์—”์ง„์— ์˜ํ•ด ์ฒ˜์Œ ๋กœ๋“œ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

 

Fuction Execution Context

Execution context๋ฅผ ๋”ฐ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์‹คํ–‰๋จ์— ๋”ฐ๋ผ์„œ ํ•ด๋‹น ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ƒ์„ฑ๋˜๋Š” ์ปจํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ํ•จ์ˆ˜๋Š” ๊ณ ์œ ์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ์–ธ์ œ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

*์ฝœ์Šคํƒ(callstack)

call์€ ํ˜ธ์ถœ์„ ๋œปํ•˜๊ณ  stack์€ ์ถœ์ž…๊ตฌ๊ฐ€ ํ•˜๋‚˜๋ฟ์ธ ๊นŠ์€ ์šฐ๋ฌผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ callstack์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์šฐ๋ฌผ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

ํ•ญ์ƒ ๋งจ ์œ„์— ๋†“์ธ ํ•จ์ˆ˜๋ฅผ ์šฐ์„ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๊ฐ€์žฅ ์œ„์— ์Œ“์—ฌ์žˆ๋Š” context์™€ ๊ด€๋ จ ์žˆ๋Š”

์ฝ”๋“œ๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ์ „์ฒด ์ฝ”๋“œ์˜ ํ™˜๊ฒฝ๊ณผ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

 

4. ์Šค์ฝ”ํ”„ ์ฒด์ธ, ๋ณ€์ˆ˜ ์€๋‹‰ํ™”

*์Šค์ฝ”ํ”„์ฒด์ธ

์Šค์ฝ”ํ”„(์‹๋ณ„์ž์˜ ์œ ํšจ ๋ฒ”์œ„)๋ฅผ ์•ˆ์—์„œ๋ถ€ํ„ฐ ๋ฐ”๊นฅ์œผ๋กœ ์ฐจ๋ก€์ฐจ๋ก€ ๊ฒ€์ƒ‰ํ•ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์Šค์ฝ”ํ”„์—์„œ ๋™์ผํ•œ ์‹๋ณ„์ž๋ฅผ ์„ ์–ธํ•œ ๊ฒฝ์šฐ, ๋ฌด์กฐ๊ฑด ์Šค์ฝ”ํ”„ ์ฒด์ธ ์ƒ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ๋ฐœ๊ฒฌ๋œ ์‹๋ณ„์ž์—๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

*๋ณ€์ˆ˜ ์€๋‹‰ํ™”

์ง์ ‘์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ ๋˜๋Š” ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๋ง‰๋Š” ๊ฒƒ์„ ๋ณ€์ˆ˜ ์€๋‹‰ํ™”๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๐ŸŒ™  ์‹ค์Šต ๊ณผ์ œ

์ฝ˜์†”์— ์ฐํž b ๊ฐ’์„ ์˜ˆ์ƒํ•ด๋ณด๊ณ , ์–ด๋””์—์„œ ์„ ์–ธ๋œ “b”๊ฐ€ ๋ช‡๋ฒˆ์งธ ๋ผ์ธ์—์„œ ํ˜ธ์ถœํ•œ console.log์— ์ฐํ˜”๋Š”์ง€, ์™œ ๊ทธ๋Ÿฐ์ง€ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”. ์ฃผ์„์„ ํ’€์–ด๋ณด๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค๋ฉด ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ์ง€ ์„ค๋ช…ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ด๋ณด์„ธ์š”.

 

let b = 1; // ํ•จ์ˆ˜๋ฐ–์— ์žˆ์–ด์„œ ์–ด๋–ค ์œ„์น˜์—์„œ๋„ ์“ธ์ˆ˜์žˆ๋Š” ์ „์—ญ๋ณ€์ˆ˜

function hi () { //hi๋ผ๋Š” ํ•จ์ˆ˜

const a = 1; //ํ•จ์ˆ˜ ์•ˆ์—์žˆ๋Š” ์ง€์—ญ๋ณ€์ˆ˜ a(const๋ผ์„œ ๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ)

let b = 100; //ํ•จ์ˆ˜ ์•ˆ์—์žˆ๋Š” ์ง€์—ญ๋ณ€์ˆ˜ b(let๋ผ์„œ ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)

b++; //b๋ฅผ 1์ฆ๊ฐ€ํ•ด๋ผ.

console.log(a,b);

}

//console.log(a); // ์—๋Ÿฌ๋‚˜๋Š” ์ด์œ  : ์ „์—ญ๋ณ€์ˆ˜์—๋Š” a ๋ณ€์ˆ˜๊ฐ€ ์—†์–ด์„œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ฌ๊ฒŒ ์—†์–ด์„œ ์—๋Ÿฌ๊ฐ€ ๋‚จ.

console.log(b); // ํ•จ์ˆ˜๋ฐ–์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ๋ณ€์ˆ˜ b๋ฅผ ๋ถ€๋ฅด๋Š”๊ฑฐ์—ฌ์„œ ์ฝ˜์†”์ฐฝ์— 1์ด ์ฐํž˜.

hi(); // hi๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ (1,101)์ด ์ฐํž˜

console.log(b); // ํ•จ์ˆ˜๋ฐ–์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ๋ณ€์ˆ˜ b๋ฅผ ๋ถ€๋ฅด๋Š”๊ฑฐ์—ฌ์„œ ์ฝ˜์†”์ฐฝ์— 1์ด ์ฐํž˜.
Comments