λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’» DEV/Javascript & NodeJS20

[JS] 0.1 + 0.2 !== 0.3 인 이유 이전뢀터 ν•œ λ²ˆμ€ μ •λ¦¬ν•΄μ„œ 올리렀고 ν–ˆλ˜ 주제인데, μ΄μ œμ„œμ•Ό 글을 써 λ³Έλ‹€. λŒ€λΆ€λΆ„μ˜ 컴퓨터 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 0.1 + 0.2 λ₯Ό μ—°μ‚°ν•˜λ©΄ μ •ν™•ν•œ 값인 0.3 이 λ‚˜μ˜€μ§€ μ•ŠλŠ”λ‹€. λŒ€μ‹ , 근사값인 0.30000.... x κ°€ λ‚˜μ˜€λŠ” 것을 확인할 수 μžˆλ‹€. μ‚¬λžŒλ³΄λ‹€ λ”μš± μ •ν™•ν•œ 연산을 ν•˜λŠ” 컴퓨터가 이런 였차λ₯Ό 좜λ ₯ν•˜λ‹€λ‹ˆ, μ΄μƒν•œ 일이닀. ν•˜μ§€λ§Œ μ΄λŠ” 컴퓨터가 데이터λ₯Ό μ €μž₯ν•˜λŠ” 방법이 μ‚¬λžŒμ΄ 연산을 ν•˜λŠ” 방법과 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— μƒκΈ°λŠ” ν˜„μƒμ΄λ‹€. 즉, 였히렀 컴퓨터가 연산을 λ„ˆλ¬΄ μ •ν™•ν•˜κ²Œ ν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν•˜λŠ” side effect 인 것이닀. μ»΄ν“¨ν„°μ˜ 숫자 체계 λͺ¨λ“  컴퓨터듀은 자료λ₯Ό λΉ„νŠΈμ™€ λ°”μ΄νŠΈ (bit & byte)에 μ €μž₯ν•œλ‹€. λΉ„νŠΈλŠ” μ»΄ν“¨ν„°μ—μ„œ μ‚¬μš©ν•˜λŠ” κ°€μž₯ μž‘μ€ 데이터 λ‹¨μœ„μ΄λ‹€. ν•˜λ‚˜μ˜ λΉ„νŠΈλŠ” 2진.. 2022. 1. 9.
[JavaScript] 클래슀 (Class) μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λΉ„λ‘―ν•œ μ—¬λŸ¬ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—λŠ” "클래슀", ν•œκ΅­μ–΄λ‘œ λ²ˆμ—­ν•˜λ©΄ "λΆ„λ°˜, 개체ꡰ" μ΄λΌλŠ” κ°œλ…μ΄ μ‘΄μž¬ν•œλ‹€. 이 κ°œλ…μ€ "객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°" 과도 κΉŠμ€ 연관성을 가지고 μžˆμ–΄, κ°œλ°œμžλ‘œμ¨λŠ” μ•Œμ•„λ‘μ–΄μ•Ό ν•  ν•„μˆ˜ 상식이기도 ν•˜λ‹€. ν΄λž˜μŠ€λŠ” 말 κ·ΈλŒ€λ‘œ ν•˜λ‚˜μ˜ κ·Έλ£Ή, λ˜λŠ” 묢음이라고 μƒκ°ν•˜λ©΄ νŽΈν•˜λ‹€.κ°€λ Ή, '이름', '성별', 'λ‚˜μ΄' λΌλŠ” 속성이 있고, '이름 λΆ€λ₯΄κΈ°', '개λͺ…ν•˜κΈ°', 'λ‚˜μ΄ κ³„μ‚°ν•˜κΈ°' λ“±μ˜ λ©”μ„œλ“œ (κΈ°λŠ₯) 이 μžˆλ‹€κ³  ν•˜μž. '이름' 속성과 '이름 λΆ€λ₯΄κΈ°', '개λͺ…ν•˜κΈ°' λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜λ‘œ κ·Έλ£Ήν™”ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 것이 이듀을 κ°œλ³„μ μœΌλ‘œ λΆ„μ‚°μ‹œν‚€λŠ” 것보닀 훨씬 μž‘μ—…μ— μš©μ΄ν•  것이닀. μ΄λ ‡κ²Œ λΉ„μŠ·ν•œ κΈ°λŠ₯을 ν•˜κ±°λ‚˜ 속성을 κ°–λŠ” μš”μ†Œλ“€μ„ ν•˜λ‚˜μ˜ 객체에 λ‹΄μ•„ μ‚¬μš©ν•˜κ³  관리할 수 μžˆλ„λ‘ ν•˜λŠ” 자료ꡬ쑰.. 2021. 12. 12.
[Javascript] Generator (μ œλ„€λ ˆμ΄ν„°) πŸ“ Intro μ§€λ‚œ κΈ€μ—μ„œ λ‹€λ£¨μ—ˆλ˜ Iterator 와 μΈμ ‘ν•˜κ²Œ μ‚¬μš©λ˜λŠ” κ°œλ… 쀑 ν•˜λ‚˜κ°€ λ°”λ‘œ generator (μ œλ„€λ ˆμ΄ν„°) 이닀. μ œλ„€λ ˆμ΄ν„°λŠ” ES6μ—μ„œ λ„μž…λ˜μ–΄, μ½”λ“œ λΈ”λ‘μ˜ 싀행을 μΌμ‹œ μ€‘μ§€ν–ˆλ‹€κ°€ ν•„μš”ν•œ μ‹œμ μ— μž¬κ°œν•  수 μžˆλŠ” νŠΉμˆ˜ν•œ ν•¨μˆ˜μ΄λ‹€. 이번 κΈ€μ—μ„œλŠ” generator funciton κ³Ό generator의 ν™œμš© 방법을 μ‚΄νŽ΄λ³΄κ³ μž ν•œλ‹€. ✨ Generator MDN μ—μ„œ μ •μ˜ν•˜λŠ” generator λŠ” "generator function (μ œλ„€λ ˆμ΄ν„° ν•¨μˆ˜) λ‘œλΆ€ν„° λ°˜ν™˜λœ 값이며 iterable, iterator protocol 을 μ€€μˆ˜ν•˜λŠ” κ°’" 이닀. μœ„μ˜ μ •μ˜μ—μ„œ ν‘œκΈ°λœ Generator function 의 μ£Όμš” νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™λ‹€. 1. ν•¨μˆ˜ 호좜자 (caller) μ—κ²Œ ν•¨μˆ˜ μ‹€ν–‰μ˜ μ œμ–΄.. 2021. 10. 26.
[Javascript] Iterable (μ΄ν„°λŸ¬λΈ”) πŸ“ Intro Iterate λŠ” 'λ°˜λ³΅ν•˜λ‹€' λŠ” 사전적 의미λ₯Ό 가지고 μžˆλŠ” μš©μ–΄λ‘œ, ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 주둜 '반볡 κ°€λŠ₯ν•œ 객체' λ₯Ό μ˜λ―Έν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—λ§Œ μ‘΄μž¬ν•˜λŠ” κ°œλ…μ€ μ•„λ‹ˆμ§€λ§Œ, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ΄ν„°λŸ¬λΈ” κ°œλ…μ„ ν•™μŠ΅ν•˜λ©΄ λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μš©μ–΄μ—λ„ μ‰½κ²Œ μ μš©ν•  수 μžˆλ‹€. ✨ ES6 에 μΆ”κ°€λœ Iterable ECMAScript λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν‘œμ€€ν™”ν•˜κ³  ν† λŒ€λ₯Ό κ΅¬μ„±ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ ν‘œμ€€ν™”λœ 슀크립트 ν”„λ‘œκ·Έλž˜λ° 언어이며, ES6은 6번째 ECMAScript 버전을 μ˜λ―Έν•œλ‹€. ES6 은 2015년에 μ œμ •λ˜μ—ˆλŠ”λ°, μ΄μ „κΉŒμ§€ λ¬Έμ œκ°€ λ˜μ—ˆλ˜ λ§Žμ€ 뢀뢄듀이 ν•΄κ²°λ˜κ³  κΈ°λŠ₯이 λŒ€κ±° μΆ”κ°€λ˜μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒν–ˆλ‹€. ES6μ—λŠ” 기쑴에 μ—†μ—ˆλ˜ Scope, parameter handling, ꡬ쑰뢄.. 2021. 10. 13.
[Javascript] ν΄λ‘œμ €(Closure) ν΄λ‘œμ € (Closure) λŠ” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ νŠΉμ„±μœΌλ‘œ, JS 뿐만 μ•„λ‹ˆλΌ ν•˜μŠ€μΌˆμ΄λ‚˜ 슀칼라 λ“±μ˜ 언어에도 λ“±μž₯ν•œλ‹€. MDN 이 μ •μ˜ν•˜λŠ” ν΄λ‘œμ €λŠ” λ‹€μŒκ³Ό κ°™λ‹€. ν΄λ‘œμ €λŠ” ν•¨μˆ˜μ™€ ν•¨μˆ˜κ°€ μ„ μ–Έλœ μ–΄νœ˜μ (λ ‰μ‹œμ»¬) ν™˜κ²½(Lexical environment)의 쑰합이닀. λ ‰μ‹œμ»¬ ν™˜κ²½μ— λŒ€ν•œ λ…Όμ˜λŠ” 이전 κΈ€μ—μ„œ κ°„λž΅νžˆ ν–ˆμœΌλ‚˜, ν΄λ‘œμ €μ— λŒ€ν•œ 이해λ₯Ό 돕기 μœ„ν•΄μ„œ 깊이 μ•Œμ•„μ•Ό ν•˜λŠ” κ°œλ…μ΄λ―€λ‘œ λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ κ°œλ…λΆ€ν„° μ•Œμ•„λ³΄μž. ✨ λ ‰μ‹œμ»¬ ν™˜κ²½κ³Ό [[Environment]] πŸ“Œ λ ‰μ‹œμ»¬ ν™˜κ²½ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό 가지고 μžˆλ‹€. λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λŠ” ν•¨μˆ˜μ˜ μŠ€μ½”ν”„μ™€ ν•¨μˆ˜κ°€ μ •μ˜λœ μœ„μΉ˜μ— 따라 κ²°μ •λ˜λŠ” μƒμœ„ μŠ€μ½”ν”„μ΄λ‹€. JS λŠ” λ ‰μ‹œμ»¬ ν™˜κ²½μ„ λ”°λ₯΄κΈ° λ•Œλ¬Έμ—, ν•¨μˆ˜μ˜ 호좜 μœ„μΉ˜κ°€ μ•„λ‹Œ μ •μ˜ν•œ μœ„μΉ˜μ— .. 2021. 10. 6.
[Javascript] μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ (Execution Context) 와 μ†ŒμŠ€μ½”λ“œ 이전에 Javascript μ—μ„œμ˜ this λ₯Ό λ‹€λ€˜λ˜ κΈ€μ—μ„œ 잠깐 "μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ"λ₯Ό μ–ΈκΈ‰ν–ˆμ—ˆλ‹€. Javascript μ—λŠ” (그리고 μ•„λ§ˆ λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—λŠ”) μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλΌλŠ” κ°œλ…μ΄ μ‘΄μž¬ν•˜λŠ”λ°, 이λ₯Ό 잘 μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” μš°μ„  "μ†ŒμŠ€μ½”λ“œ" 의 κ°œλ…λΆ€ν„° 이해해야 ν•œλ‹€. ✨ μ†ŒμŠ€μ½”λ“œ ECMAScript λŠ” μ†ŒμŠ€μ½”λ“œλ₯Ό 4가지 νƒ€μž…μœΌλ‘œ κ΅¬λΆ„ν•œλ‹€. μ†ŒμŠ€μ½”λ“œλŠ” νƒ€μž…λ§ˆλ‹€ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•˜λŠ” κ³Όμ •κ³Ό 관리 λ‚΄μš©μ΄ λ‹€λ₯΄λ©°, 이λ₯Ό κ°„λž΅νžˆ μš”μ–‘ν•œ λ‚΄μš©μ€ λ‹€μŒκ³Ό κ°™λ‹€. πŸ“ μ „μ—­ μ½”λ“œ (Global code) : 전역에 μ‘΄μž¬ν•˜λŠ” μ½”λ“œ (ν•¨μˆ˜, 클래슀의 λ‚΄λΆ€ μ½”λ“œ 미포함) 1. μ „μ—­ μŠ€μ½”ν”„ (μ΅œμƒμœ„ μŠ€μ½”ν”„) 생성 2. μ „μ—­ 객체와 μ—°κ²° 3. var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ μ „μ—­ λ³€μˆ˜ + μ„ μ–Έλœ μ „μ—­ ν•¨μˆ˜λ₯Ό μ „μ—­ 객체의 ν”„λ‘œ.. 2021. 9. 28.
[NodeJS] Node 의 this λž€? (+ ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ this) ✨ console.log(this) 의 κ²°κ³Ό 이전에 μ •λ¦¬ν•΄λ‘μ—ˆλ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ(μ΄ν•˜ JS)의 this μ—μ„œ μ£Όμ˜μ‚¬ν•­μœΌλ‘œ μ–ΈκΈ‰ν–ˆλ“―, λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰λ˜λŠ” JS 의 this 와 node μ—μ„œ μ‹€ν–‰λ˜λŠ” JS 의 this λŠ” λ‹€λ₯΄λ‹€. [Javascript] Javascript 의 this λž€? ❗ 주의: Node μ—μ„œμ˜ this λŠ” 쑰금 λ‹€λ¦…λ‹ˆλ‹€. 이 κΈ€μ—μ„œ λ‹€λ£¨λŠ” λ‚΄μš©μ€ λΈŒλΌμš°μ €μ—μ„œ μž‘λ™ν•˜λŠ” JS μ—μ„œμ˜ this μž…λ‹ˆλ‹€. Javascript 의 this λŠ” 자주 λ“±μž₯ν•˜μ§€λ§Œ, μ •ν™•νžˆ μ•ŒκΈ° νž˜λ“  κ°œλ…μ΄λ‹€. 이번 κΈ€μ—μ„œ haeunyah.tistory.com λΈŒλΌμš°μ €μ˜ μ „μ—­κ°μ²΄λŠ” window 이닀. λ”°λΌμ„œ μ „μ—­ scope μ—μ„œ console.log(this) λ₯Ό μž…λ ₯ν•  경우 window κ°€ λœ¨λŠ” 것이 λ§žλ‹€. conso.. 2021. 9. 10.
[Javascript] Javascript 의 this λž€? ❗ 주의: Node μ—μ„œμ˜ this λŠ” 쑰금 λ‹€λ¦…λ‹ˆλ‹€. 이 κΈ€μ—μ„œ λ‹€λ£¨λŠ” λ‚΄μš©μ€ λΈŒλΌμš°μ €μ—μ„œ μž‘λ™ν•˜λŠ” JS μ—μ„œμ˜ this μž…λ‹ˆλ‹€. Javascript 의 this λŠ” 자주 λ“±μž₯ν•˜μ§€λ§Œ, μ •ν™•νžˆ μ•ŒκΈ° νž˜λ“  κ°œλ…μ΄λ‹€. 이번 κΈ€μ—μ„œλŠ” this 의 기초 μž‘λ™ 방식과 바인딩에 λŒ€ν•΄ μ„€λͺ…ν•˜κ³ μž ν•œλ‹€. this 의 κ°œλ…μ— μ ‘κ·Όν•˜κΈ° μ „, λ¨Όμ € μ•Œμ•„λ‘μ–΄μ•Ό ν•˜λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ™€ ν”„λ‘œνΌν‹° & λ©”μ„œλ“œλΆ€ν„° μ‚΄νŽ΄λ³΄μž. ✨ Javascript μ—μ„œμ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ 이전 κΈ€μ—μ„œ 잠깐 μ–ΈκΈ‰ν–ˆμ§€λ§Œ, Javascript λŠ” 컴파일 μ–Έμ–΄κ°€ μ•„λ‹Œ 인터프리터 언어이닀. 인터프리터 μ–Έμ–΄λ‘œ μž‘μ„±λœ μ½”λ“œλŠ” μ‹€ν–‰ μ¦‰μ‹œ 인터프리터가 μ½”λ“œλ₯Ό ν•œμ€„μ”© 읽어내렀가며 μ‹€ν–‰ν•œλ‹€. 이 λ•Œ μΈν„°ν”„λ¦¬ν„°λŠ” μ½”λ“œ 해석을 μ‘°κΈˆμ΄λΌλ„ νŽΈν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ μ½”λ“œλ₯Ό μž‘μ€ 쑰각으둜 .. 2021. 9. 7.
[Javascript] 이벀트 루프 (Event Loop) λž€? ✨ JS, Event Loop, Single Thread NodeJs 의 single/multi thread μ—¬λΆ€λ₯Ό μ •λ¦¬ν•˜λ‹€λ³΄λ‹ˆ Js 의 Event Loop κ°œλ…μ„ 쑰금 더 ν™•μ‹€νžˆ μ•Œμ•„λ‘μ–΄μ•Όκ² λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€. [NodeJS] NodeJS λŠ” Single Thread 일까? Multi Thread 일까? ✨ 고민이 μ‹œμž‘λœ 계기 JS 기초λ₯Ό ν•™μŠ΅ν•˜λ˜ λ‹Ήμ‹œμ—λŠ” μŠ€λ ˆλ“œμ™€ ν”„λ‘œμ„ΈμŠ€μ˜ κΈ°λ³Έ κ°œλ…μ„ ν•™μŠ΅ν•΄λ‘κΈ°λ§Œ ν•˜κ³ , ꡬ체적으둜 μ‚΄νŽ΄λ³΄μ§€ λͺ»ν–ˆμ—ˆλ‹€. μ›Ήκ°œλ°œ κ΅μœ‘κ³Όμ •μ΄ λλ‚˜κ°ˆ 무렡, μ‹€μ‹œκ°„ 쀌 κ°•μ˜μ—μ„œ haeunyah.tistory.com μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹±κΈ€μŠ€λ ˆλ“œ 언어이닀. ν•˜μ§€λ§Œ 이전 κΈ€μ—μ„œλ„ λ³Ό 수 μžˆμ—ˆλ“―, λ©€ν‹°μŠ€λ ˆλ“œμ²˜λŸΌ λ™μ‹œμ— μ—¬λŸ¬ νƒœμŠ€ν¬μ˜ μž‘λ™μ΄ κ°€λŠ₯ν•˜λ‹€. 이 νŠΉμ§•μ€ λΈŒλΌμš°μ € λŸ°νƒ€μž„ ν™˜κ²½μ—μ„œλ„ λ™μΌν•˜λ‹€. μ™œμΌ.. 2021. 9. 7.