Deep Dive μ •λ³΅κΈ°πŸš©

λ”₯ λ‹€μ΄λΈŒ 기둝을 μ€‘μ§€ν•˜κΈ°λ‘œ κ²°μ •. λ“€μ–΄κ°€λŠ” μ‹œκ°„μ΄ λ„ˆλ¬΄ 많고 효율이 떨어진닀. μ½κΈ°λŠ” ν•˜λ˜ μ€‘μš”ν•œ 포인트만 μž‘μ•„μ„œ javaScriptμΉ΄ν…Œκ³ λ¦¬μ— 기둝.
- μ—°μ‚°μžλž€? μ—°μ‚°μžλŠ” ν•˜λ‚˜ μ΄μƒμ˜ ν‘œν˜„μ‹μ„ λŒ€μƒμœΌλ‘œ μ‚°μˆ , ν• λ‹Ή, 비ꡐ, 논리, νƒ€μž…, μ§€μˆ˜ μ—°μ‚° 등을 μˆ˜ν–‰ν•˜μ—¬ ν•˜λ‚˜μ˜ 값을 λ§Œλ“ λ‹€. μ΄λ•Œ μ—°μ‚°μ˜ λŒ€μƒμ€ ν”Όμ—°μ‚°μžλΌ ν•œλ‹€. ν”Όμ—°μ‚°μžλŠ” κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” ν‘œν˜„μ‹ 이어야 ν•œλ‹€. ν”Όμ—°μ‚°μžμ™€ μ—°μ‚°μžμ˜ μ‘°ν•©μœΌλ‘œ 이뀄진 μ—°μ‚°μž ν‘œν˜„μ‹λ„ κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” ν‘œν˜„μ‹μ΄λ‹€. ex) ν‘œν˜„μ‹μ΄λž€? κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” 문을 λ§ν•œλ‹€. - μ‚°μˆ  μ—°μ‚°μž μ‚°μˆ  μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μžλ₯Ό λŒ€μƒμœΌλ‘œ μˆ˜ν•™μ  계산을 μˆ˜ν–‰ν•΄ μƒˆλ‘œμš΄ 숫자 값을 λ§Œλ“ λ‹€. μ‚°μˆ  연산이 λΆˆκ°€λŠ₯ν•œ 경우 NaN을 λ°˜ν™˜ν•œλ‹€. (Not a Number) μ‚°μˆ  μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μžμ˜ κ°œμˆ˜μ— 따라 이항 μ‚°μˆ  μ—°μ‚°μž, 단항 μ‚°μˆ  μ—°μ‚°μžλ‘œ κ΅¬λΆ„ν•œλ‹€. 이항 μ‚°μˆ  μ—°μ‚°μž 2개의 ν”Όμ—°μ‚°μžλ₯Ό μ‚°μˆ  μ—°μ‚°ν•˜μ—¬ 값을 λ§Œλ“ λ‹€. 이항 μ‚°μˆ  μ—°μ‚°..
μžλ°”μŠ€ν¬λ¦½νŠΈ μ–Έμ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 동적 타이핑 νŠΉμ§•μ„ 가지고 있고 동적 νƒ€μž… 언어라 ν•œλ‹€. 동적 νƒ€μž… μ–Έμ–΄λŠ” λ³€μˆ˜μ˜ νƒ€μž…μ€ 선언이 μ•„λ‹Œ ν• λ‹Ήμ—μ„œ κ²°μ •(νƒ€μž… μΆ”λ‘ ) 이 되고 μž¬ν• λ‹Ήμ— μ˜ν•΄ λ³€μˆ˜μ˜ νƒ€μž…μ€ μ–Έμ œλ“ μ§€ λ™μ μœΌλ‘œ λ³€ν•  수 μžˆλ‹€. 데이터 νƒ€μž…μ˜ μ’…λ₯˜ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 총 7개의 데이터 νƒ€μž…μ„ μ œκ³΅ν•˜κ³  그쀑 μ›μ‹œ νƒ€μž…(primitive type)κ³Ό 객체 νƒ€μž…(object/reference type)으둜 λΆ„λ₯˜λœλ‹€. μ›μ‹œ νƒ€μž… : number(숫자), string(λ¬Έμžμ—΄), boolean(μ°Έ, 거짓), undefined(μžλ£Œν˜• λ―Έμ„€μ •), null(값이 μ—†μŒ), Symbol(ES6μ—μ„œ μΆ”κ°€λœ νƒ€μž…) 객체 νƒ€μž… : 객체{ }, λ°°μ—΄[ ], ν•¨μˆ˜ λ“±.. Number (숫자) λ‹€λ₯Έ μ–Έμ–΄λŠ” μ •μˆ˜μ™€ μ‹€μˆ˜λ₯Ό ꡬ뢄해 int..
κ°’(value) 값은 식(ν‘œν˜„μ‹)이 ν‰κ°€λ˜μ–΄ μƒμ„±λœ κ²°κ³Όλ‹€. (ν‰κ°€λž€ 식을 ν•΄μ„ν•˜μ—¬ 값을 μƒμ„±ν•˜κ±°λ‚˜ μ°Έμ‘° ν•˜λŠ” 것을 의미) λͺ¨λ“  값은 데이터 νƒ€μž…μ„ 가지며 λ©”λͺ¨λ¦¬μ— 2μ§„μˆ˜, λΉ„νŠΈμ˜ λ‚˜μ—΄λ‘œ μ €μž₯λœλ‹€. λ©”λͺ¨λ¦¬μ— μ €μž₯된 값은 데이터 νƒ€μž…μ— 따라 λ‹€λ₯΄κ²Œ ν•΄μ„λœλ‹€. (ex : 0100 0001 은 숫자둜 ν•΄μ„ν•˜λ©΄ 65, 문자둜 ν•΄μ„ν•˜λ©΄ 'A') 값은 λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ 생성할 수 μžˆλ‹€. ( λ¦¬ν„°λŸ΄, 식 λ“±) λ¦¬ν„°λŸ΄(literal) λ¦¬ν„°λŸ΄μ€ μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 문자 λ˜λŠ” μ•½μ†λœ 기호λ₯Ό μ‚¬μš©ν•΄ 값을 μƒμ„±ν•˜λŠ” ν‘œκΈ°λ²•μ΄λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” μ‹œμ μΈ λŸ°νƒ€μž„μ— λ¦¬ν„°λŸ΄μ„ 평가해 값을 μƒμ„±ν•œλ‹€. ν‘œν˜„μ‹(expression) ν‘œν˜„μ‹μ€ κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” λ¬Έ 이닀. let score = 50 + 50; 50 + 5..
μ‹λ³„μžλž€? μ‹λ³„μžλŠ” μ–΄λ– ν•œ 값을 κ΅¬λ³„ν•΄μ„œ 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름을 λ§ν•œλ‹€. (λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ… λ“±) μ‹λ³„μž 넀이밍 κ·œμΉ™ let test; // O let $test; // O let _test; // O let 1test; // X 숫자둜 μ‹œμž‘ let &test; // X 특수문자 μ‚¬μš© let test!!!; // X 특수문자 μ‚¬μš© let this; // X μ˜ˆμ•½μ–΄ μ‚¬μš© μ‹λ³„μžλŠ” 특수문자λ₯Ό μ œμ™Έν•œ 문자, 숫자, μ–Έλ”μŠ€μ½”μ–΄(_), λ‹¬λŸ¬ 기호($)λ₯Ό 포함할 수 μžˆλ‹€. 단, μ‹λ³„μžλŠ” 특수문자λ₯Ό μ œμ™Έν•œ 문자, μ–Έλ”μŠ€μ½”μ–΄(_), λ‹¬λŸ¬ 기호($)둜 μ‹œμž‘ν•΄μ•Ό ν•œλ‹€. 숫자둜 μ‹œμž‘ν•˜λŠ” 것은 X μ˜ˆμ•½μ–΄λŠ” μ‹λ³„μžλ‘œ μ‚¬μš©ν•  수 μ—†λ‹€. μ˜ˆμ•½μ–΄λž€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•˜λŠ” 단어λ₯Ό λ§ν•œλ‹€. 넀이밍 μ»¨λ²€μ…˜ 넀이밍 μ»¨λ²€μ…˜μ€ ν•˜λ‚˜..
μ΄ˆκΈ°ν™”λž€ ? μ΄ˆκΈ°ν™”λž€ λ³€μˆ˜κ°€ μ„ μ–Έλ˜κ³  졜초둜 값을 ν• λ‹Ήν•˜λŠ” 것을 λ§ν•˜λŠ”λ°, 이 μ΄ˆκΈ°ν™” 단계λ₯Ό κ±°μΉ˜μ§€ μ•ŠμœΌλ©΄ ν™•λ³΄λœ λ©”λͺ¨λ¦¬ κ³΅κ°„μ—λŠ” 이전에 λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‚¬μš©ν–ˆλ˜ 값이 λ‚¨μ•„μžˆμ„ 수 있고 이 값을 μ“°λ ˆκΈ° κ°’(garbage value)이라 ν•œλ‹€. λ”°λΌμ„œ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•œ ν›„ 값을 ν• λ‹Ήν•˜μ§€ μ•Šκ³  κ³§λ°”λ‘œ λ³€μˆ˜ 값을 μ°Έμ‘°ν•˜λ©΄ μ“°λ ˆκΈ° 값이 λ‚˜μ˜¬ 수 μžˆλ‹€. var var은 ES6μ—μ„œ let, const ν‚€μ›Œλ“œκ°€ 생기기 μ΄μ „κΉŒμ§€ μœ μΌν•œ λ³€μˆ˜μ„ μ–Έ ν‚€μ›Œλ“œμ˜€λ‹€. 이런 varμ—λŠ” μ—¬λŸ¬λ‹¨μ μ΄ μžˆλŠ”λ° κ·Έ 쀑 λŒ€ν‘œμ μΈκ±΄ 블둝 레벨 μŠ€μ½”ν”„κ°€ μ•„λ‹Œ ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„μ΄κΈ° λ•Œλ¬Έμ΄λ‹€. 이런 ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λŠ” μƒκ°μΉ˜ λͺ»ν•œ 였λ₯˜λ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€. var score; //λ³€μˆ˜ μ„ μ–Έ ν•΄λ‹Ή μ½”λ“œλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έλ§Œ ν•œ μƒνƒœμ΄λ‹€. λ³€μˆ˜μ— 값을..
μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ˜ μ—°μ‚° κ³Όμ • πŸ’» μš°μ„  μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 10 + 20 을 μ§„ν–‰ν• λ•Œμ˜ μˆœμ„œλΆ€ν„° μ•Œμ•„λ³΄μž. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 10 + 20 μ΄λΌλŠ” μ½”λ“œλ₯Ό κ³„μ‚°ν• λ•Œ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•΄ 데이터λ₯Ό κΈ°μ–΅ν•˜κ³ , CPUλ₯Ό μ‚¬μš©ν•΄ 연산을 μ§„ν–‰ν•œλ‹€. λ©”λͺ¨λ¦¬λŠ” 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬ μ…€μ˜ 집합체이며 λ©”λͺ¨λ¦¬ μ…€ ν•˜λ‚˜μ˜ ν¬κΈ°λŠ” 1λ°”μ΄νŠΈ(8λΉ„νŠΈ), 즉 1λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ 데이터λ₯Ό μ €μž₯, λ˜λŠ” μ½λŠ” μž‘μ—…μ„ ν•œλ‹€. μ»΄ν“¨ν„°λŠ” ν•΄λ‹Ή 데이터가 ν…μŠ€νŠΈ, 이미지, 숫자 무엇이 λ˜μ—ˆλ“  λͺ¨λ“  μž‘μ—…μ„ 2μ§„μˆ˜λ‘œ μ²˜λ¦¬ν•˜κ³  μ €μž₯ν•œλ‹€. 즉, 10 + 20 은 λ©”λͺ¨λ¦¬ μƒμ˜ μž„μ˜μ˜ μœ„μΉ˜μ— μ €μž₯ν•˜κ³  CPUλŠ” 이 값을 읽어 연산을 μ§„ν–‰ν•œ ν›„ λ©”λͺ¨λ¦¬ μƒμ˜ μž„μ˜μ˜ μœ„μΉ˜μ— 결과값도 μ €μž₯ν•œλ‹€. μ–΄? 결과값인 30을 μ΄μš©ν•˜κ³ μ‹Άμ€λ°... πŸ™„ μ΄λ•Œ μ΄μš©ν•  수 μžˆλŠ”κ²Œ λ°”λ‘œ..
β€» ν•΄λ‹Ή Deep Dive 글은 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 원리와 κ°œλ…λ“±μ„ 책을 톡해 κ³΅λΆ€ν•˜λ©° λ‹€μ‹œ ν•œλ²ˆ λ³΅κΈ°ν•˜κΈ° μœ„ν•΄ μ λŠ” κΈ€μ΄λ―€λ‘œ μ±…μ˜ 흐름에 따라 μ κ²Œλ¨μ„ μ•Œλ €λ“œλ¦¬λ©° 단어에 λŒ€ν•œ (ex: ν”„λ‘œν† νƒ€μž…, 객체지ν–₯) μ„€λͺ…은 이 ν›„ ν•΄λ‹Ή ν•­λͺ©μ΄ λ‚˜μ˜¬λ•Œ μžμ„Έν•˜κ²Œ 적고 μ‚¬μš©ν•΄ λ³Ό μ˜ˆμ •μž…λ‹ˆλ‹€. JavaScript πŸ’ͺ ECMAScriptλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν‘œμ€€ 사양인 ECMA-262λ₯Ό λ§ν•˜λ©°, ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ κ°’, νƒ€μž…, 객체와 ν”„λ‘œνΌν‹°, ν•¨μˆ˜, ν‘œμ€€ λ‚΄μž₯ 객체 λ“± 핡심 문법을 κ·œμ •ν•œλ‹€. 즉, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œμ„œ ECMAScript와 λΈŒλΌμš°μ €κ°€ 별도 μ§€μ›ν•˜λŠ” DOM,BOM, Canvas, XML, fetch 등을 μ•„μš°λ₯΄λŠ” κ°œλ…μ΄λ‹€. ꡉμž₯히 λ§Žμ€ λ‚΄μž₯ 객체와 μ›Ή api에 λŒ€ν•œ λ‚΄μš©μ„ 보고 μ‹ΆμœΌλ©΄ 유λͺ…ν•œ MDN 사..
YunCow
'Deep Dive μ •λ³΅κΈ°πŸš©' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘