λ°˜μ‘ν˜•

Programming/JavaScript 33

νŒ¨ν‚€μ§€ λ§€λ‹ˆμ € Yarn Berry λž€? (+ pnp system)

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μƒˆλ‘œ ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•˜λ©΄μ„œ yarn μ—μ„œ yarn berryλ₯Ό λ„μž…ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λ²ˆμ‹œκ°„μ—λŠ” Yarn Berry에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. What is yarn berry? Yarn BerryλŠ” JS νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €μΈ Yarn의 λ‹€μŒ λ²„μ „μž…λ‹ˆλ‹€. yarn version 2λΆ€ν„° yarn berry라고 λΆ€λ¦…λ‹ˆλ‹€. What is the difference between yarn and yarn berry? κ°€μž₯ 달라진 점은 Plug'n'Play (PnP) μ‹œμŠ€ν…œμ΄λΌκ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€. PnP μ‹œμŠ€ν…œμ€ node_modules 폴더λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ , νŒ¨ν‚€μ§€μ˜ 쒅속성을 ν”„λ‘œμ νŠΈμ˜ 단일 디렉토리 νŠΈλ¦¬μ— 직접 μ„€μΉ˜ν•©λ‹ˆλ‹€. 일반적으둜 npm μ΄λ‚˜ yarn version 1을 μ‚¬μš©ν• ..

[λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive] 16μž₯ ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ(property attribute)λž€?

16.1 λ‚΄λΆ€ 슬둯과 λ‚΄λΆ€ λ©”μ„œλ“œ λ‚΄λΆ€ 슬둯 (internal slot)κ³Ό λ‚΄λΆ€ λ©”μ„œλ“œ (internal method)λŠ” JS μ—”μ§„μ˜ κ΅¬ν˜„ μ•Œκ³ λ¦¬μ¦˜μ„ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ ECMAScript μ‚¬μ–‘μ—μ„œ μ‚¬μš©ν•˜λŠ” μ˜μ‚¬ ν”„λ‘œνΌν‹° pseudo property와 μ˜μ‚¬ λ©”μ„œλ“œ pseudo method μž…λ‹ˆλ‹€. λͺ¨λ“  κ°μ²΄λŠ” [[Prototype]] μ΄λΌλŠ” λ‚΄λΆ€ μŠ¬λ‘―μ„ κ°–μŠ΅λ‹ˆλ‹€. λ‚΄λΆ€ μŠ¬λ‘―μ€ JS μ—”μ§„μ˜ λ‚΄λΆ€ λ‘œμ§μ΄λ―€λ‘œ μ›μΉ™μ μœΌλ‘œ 직접 μ ‘κ·Όν•  수 μ—†μ§€λ§Œ __proto__λ₯Ό 톡해 κ°„μ ‘ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 16.2 ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈμ™€ ν”„λ‘œνΌν‹° λ””μŠ€ν¬λ¦½ν„° 객체 Js 엔진은 ν”„λ‘œνΌν‹°λ₯Ό 생성할 λ•Œ ν”„λ‘œνΌν‹°μ˜ μ–΄νŠΈλ¦¬λ·°νŠΈλ₯Ό κΈ°λ³Έκ°’μœΌλ‘œ μžλ™ μ •μ˜ν•©λ‹ˆλ‹€. ν”„λ‘œνΌν‹°μ˜ μƒνƒœλž€ κ°’ (value), κ°’μ˜ κ°±μ‹  κ°€λŠ₯ μ—¬λΆ€ (writable), μ—΄κ±°..

[λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive] 15μž₯ let, const ν‚€μ›Œλ“œμ™€ 블둝 레벨 μŠ€μ½”ν”„λž€?

15.1 var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜μ˜ 문제점 15.1.1 λ³€μˆ˜ 쀑볡 μ„ μ–Έ ν—ˆμš© var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” 쀑볡 선언이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 15.1.2 ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•©λ‹ˆλ‹€. ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λŠ” μ „μ—­ λ³€μˆ˜λ₯Ό λ‚¨λ°œν•  κ°€λŠ₯성을 높이고 μ „μ—­ λ³€μˆ˜κ°€ 쀑볡 μ„ μ–Έλ˜λŠ” κ²½μš°κ°€ λ°œμƒν•©λ‹ˆλ‹€. 15.1.3 λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ… var ν‚€μ›Œλ“œ λ³€μˆ˜ μ„ μ–Έ μ‹œ λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ λ³€μˆ˜ 선언문이 μŠ€μ½”ν”„μ˜ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•©λ‹ˆλ‹€. // 이 μ‹œμ μ—λŠ” λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ 이미 foo λ³€μˆ˜κ°€ 선언됨 (1.μ„ μ–Έ 단계) // λ³€μˆ˜ fooλŠ” undefined둜 μ²˜κΈ°ν™” 됨 (2. μ΄ˆκΈ°ν™” 단계) console.log(foo); // undefined // λ³€..

[λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive] 14μž₯ μ „μ—­ λ³€μˆ˜μ˜ 문제점

14.1 λ³€μˆ˜μ˜ 생λͺ…μ£ΌκΈ° 14.1.1 지역 λ³€μˆ˜μ˜ 생λͺ…μ£ΌκΈ° 지역 λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°λŠ” ν•¨μˆ˜μ˜ 생λͺ… 주기와 μΌμΉ˜ν•©λ‹ˆλ‹€. function foo() { var x = 'local' // λ³€μˆ˜ x 생성, λ³€μˆ˜ x에 κ°’ ν• λ‹Ή console.loog(x) return x // λ³€μˆ˜ μ†Œλ©Έ } foo(); console.log(x); // x is not defined ν˜Έμ΄μŠ€νŒ…μ€ μŠ€μ½”ν”„λ₯Ό λ‹¨μœ„λ‘œ λ™μž‘ν•©λ‹ˆλ‹€. ν˜Έμ΄μŠ€νŒ…μ€ λ³€μˆ˜ 선언이 μŠ€μ½”ν”„μ΄ μ„ λ‘λ‘œ λŒμ–΄ μ˜¬λ €μ§„ κ²ƒμ²˜λŸΌ λ™μž‘ν•˜λŠ” JS 고유의 νŠΉμ§•μ„ λ§ν•©λ‹ˆλ‹€. 14.1.2 μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ° ν•¨μˆ˜μ™€ 달리 μ „μ—­ μ½”λ“œλŠ” λͺ…μ‹œμ μΈ 호좜 없이 μ‹€ν–‰λ©λ‹ˆλ‹€. var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜λŠ” μ „μ—­ 객체의 ν”„λ‘œνΌν‹°κ°€ λ©λ‹ˆλ‹€. μ΄λŠ” μ „μ—­ λ³€μˆ˜μ˜ 생λͺ… μ£ΌκΈ°κ°€ μ „μ—­ 객체의 생λͺ… 주기와 ..

[JavaScript] νŠΉμ • μš”μ†Œ element μœ„μΉ˜λ‘œ 슀크둀 μ΄λ™ν•˜λŠ” 방법 scrollIntoView

Intro μ•ˆλ…•ν•˜μ„Έμš”. λͺ¨λ°”일 λ„€λΉ„κ²Œμ΄μ…˜ λ©”λ‰΄μ—μ„œ 슀크둀 이동을 ν‘œν˜„ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ 방법이 μžˆκ² μ§€λ§Œ μ €λŠ” νŠΉμ • μš”μ†Œ μœ„μΉ˜λ‘œ 슀크둀 이동할 수 μžˆλŠ” scrollIntoView ν•¨μˆ˜λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. Syntax scrollIntoView() scrollIntoView(alignToTop) scrollIntoView(scrollIntoViewOptions) alignToTop - true : aligned to the top 상단 κΈ°μ€€ 슀크둀 이동 | scrollIntoViewOptions: {block: "start", inline: "nearest"} - false : aligned to the bottom ν•˜λ‹¨ κΈ°μ€€ 슀크둀 이동 | scrollIntoViewOptions: {block: "end",..

[λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive] 13μž₯ μŠ€μ½”ν”„

13.1 μŠ€μ½”ν”„λž€?λͺ¨λ“  μ‹λ³„μž(λ³€μˆ˜ 이름, ν•¨μˆ˜ 이름, 클래슀 이름 λ“±)λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ λ‹€λ₯Έ μ½”λ“œκ°€ μ‹λ³„μž μžμ‹ μ„ μ°Έμ‘°ν•  수 μžˆλŠ” 유 λ²”μœ„κ°€ κ²°μ •λ˜λΉ„λ‹€. 이λ₯Ό μŠ€μ½”ν”„λΌκ³  ν•©λ‹ˆλ‹€. 즉 μŠ€μ½”ν”„λŠ” μ‹λ³„μžκ°€ μœ νš¨ν•œ λ²”μœ„λ₯Ό λ§ν•©λ‹ˆλ‹€. var x = 'global' function foo() { var x = 'local' console.log(x) //local } foo() console.log(x) //global 13.2 μŠ€μ½”ν”„μ˜ μ’…λ₯˜μ½”λ“œλŠ” μ „μ—­κ³Ό μ§€μ—­μœΌλ‘œ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€ 13.2.1 μ „μ—­κ³Ό 지역 μŠ€μ½”ν”„μ „μ—­μ΄λž€ μ½”λ“œμ˜ κ°€μž₯ λ°”κΉ₯ μ˜μ—­μ„ λ§ν•©λ‹ˆλ‹€. 전역은 μ „μ—­ μŠ€μ½”ν”„λ₯Ό λ§Œλ“­λ‹ˆλ‹€. μ „μ—­ λ³€μˆ˜λŠ” μ–΄λ””μ„œλ“  μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 13.2.2 지역과 지역 μŠ€μ½”ν”„μ§€μ—­μ΄λž€ ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€λ₯Ό λ§ν•©λ‹ˆλ‹€. 지..

[λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive] 12μž₯ ν•¨μˆ˜

12.1 ν•¨μˆ˜λž€? ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ ν•¨μˆ˜λŠ” 일련의 과정을 λ¬Έ(statement)으둜 κ΅¬ν˜„ν•˜κ³  μ½”λ“œ λΈ”λ‘μœΌλ‘œ κ°μ‹Έμ„œ ν•˜λ‚˜μ˜ μ‹€ν–‰ λ‹¨μœ„λ‘œ μ •μ˜ν•œ κ²ƒμž…λ‹ˆλ‹€. ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μž…λ ₯을 μ „λ‹¬λ°›λŠ” λ³€μˆ˜λ₯Ό (parameter), μž…λ ₯을 (argument), 좜λ ₯을 λ°˜ν™˜κ°’return value)라고 ν•©λ‹ˆλ‹€. 12.2 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이유 μ½”λ“œμ˜ μž¬μ‚¬μš© μΈ‘λ©΄, μœ μ§€λ³΄μˆ˜μ™€ νŽΈμ˜μ„±μ„ 높이고 μ½”λ“œμ˜ 신뒰성을 λ†’μ΄λŠ” νš¨κ³Όκ°€ μžˆμŠ΅λ‹ˆλ‹€. 12.3 ν•¨μˆ˜ λ¦¬ν„°λŸ΄ λ¦¬ν„°λŸ΄μ€ μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 문자 λ˜λŠ” μ•½μ†λœ 기호둜 μ‚¬μš©ν•΄ 값을 μƒμ„±ν•˜λŠ” ν‘œκΈ° 방식을 λ§ν•©λ‹ˆλ‹€. 즉 λ¦¬ν„°λŸ΄μ€ 값을 μƒμ„±ν•˜κΈ° μœ„ν•œ ν‘œκΈ°λ²•μž…λ‹ˆλ‹€. λ”°λΌμ„œ ν•¨μˆ˜ λ¦¬ν„°λŸ΄λ„ ν‰κ°€λ˜μ–΄ 값을 μƒμ„±ν•˜λ©°, 이 값은 κ°μ²΄μž…λ‹ˆλ‹€. 즉 ν•¨μˆ˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€. 12.4 ν•¨μˆ˜ μ •μ˜ 1. ν•¨μˆ˜ μ„ μ–Έλ¬Έ fu..

[λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive] 11μž₯ μ›μ‹œ κ°’κ³Ό 객체의 비ꡐ, 얇은 볡사 κΉŠμ€ 볡사

μžλΉ„μŠ€ν¬λ¦½νŠΈκ°€ μ œκ³΅ν•˜λŠ” 7가지 데이터 νƒ€μž… (숫자, λ¬Έμžμ—΄, λΆˆλ¦¬μ–Έ, Null, undfined, μ‹¬λ²Œ, 객체 νƒ€μž…)은 크게 μ›μ‹œ νƒ€μž…κ³Ό κ°μ²΄νƒ€μž…μœΌλ‘œ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€. - μ›μ‹œ νƒ€μž…μ˜ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’μž…λ‹ˆλ‹€. 객체 νƒ€μž…μ˜ 값은 λ³€κ²½ κ°€λŠ₯ν•œ κ°’μž…λ‹ˆλ‹€. - μ›μ‹œ 값을 λ³€μˆ˜ ν• λ‹Ή μ‹œ λ³€μˆ˜(ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간)μ—λŠ” μ‹€μ œ 값이 μ €μž₯λ©λ‹ˆλ‹€. 객체 λ³€μˆ˜ ν• λ‹Ή μ‹œ λ³€μˆ˜(ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간)μ—λŠ” μ°Έμ‘° 값이 μ €μž₯λ©λ‹ˆλ‹€. - μ›μ‹œ κ°’ λ³€μˆ˜λ₯Ό λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ή μ‹œ 값에 μ˜ν•œ 전달 (pass by value)라고 ν•˜κ³ , 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” λ³€μˆ˜λ₯Ό λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ 참쑰에 μ˜ν•œ 전달 (pass by reference)라고 ν•©λ‹ˆλ‹€. 11.1 μ›μ‹œ κ°’ 11.1.1 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’ const o = {}; // const ..

[λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive] 10μž₯ 객체 λ¦¬ν„°λŸ΄

* 07μž₯ μ—°μ‚°μž, 08μž₯ 쑰건문, 09μž₯ 일뢀 뢀뢄은 νŒ¨μŠ€ν•©λ‹ˆλ‹€. * 9.1 νƒ€μž… λ³€ν™˜μ΄λž€? κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ κ°’μ˜ νƒ€μž…μ„ λ³€ν™˜ν•˜λŠ” 것을 λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜ λ˜λŠ” νƒ€μž… μΊμŠ€νŒ…μ΄λΌ ν•©λ‹ˆλ‹€. κ°œλ°œμžμ™€ μ˜λ„μ™€ 상관없이 JS엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ νƒ€μž…μ΄ λ³€ν™˜λ˜κΈ°λ„ ν•©λ‹ˆλ‹€. 이λ₯Ό 암묡적 νƒ€μž… λ³€ν™” λ˜λŠ” νƒ€μž… κ°•μ œ λ³€ν™˜μ΄λΌ ν•©λ‹ˆλ‹€. 9.2 암묡적 νƒ€μž… λ³€ν™˜ JS엔진은 ν‘œν˜„μ‹μ„ 평가할 λ•Œ μ½”λ“œμ˜ λ¬Έλ§₯을 κ³ λ €ν•΄ μ•”λ¬΅μ μœΌλ‘œ 데이터 νƒ€μž…μ„ κ°•μ œ λ³€ν™˜ ν•  λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€. '10' + 2 // '102' 7 * '10' // 70 9.4 단좕 평가 9.4.4 μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž ES11에 λ„μž…λœ μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž ?. λŠ” μ’Œν•­μ˜ ν”Όμ—°μ‚°μžκ°€ null λ˜λŠ” undefined인 경우 undefinedλ₯Ό λ°˜ν™˜ν•˜κ³ , μ•„λ‹ˆλΌλ©΄ ..

[λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive] 06μž₯ 데이터 νƒ€μž…

이 글은 λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive λ°”νƒ•μœΌλ‘œ μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. 6.1 숫자 νƒ€μž… μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” C/Java와 달리 ν•˜λ‚˜μ˜ 숫자 νƒ€μž…λ§Œ μ‘΄μž¬ν•©λ‹ˆλ‹€. 6.2 λ¬Έμžμ—΄ νƒ€μž… λ¬Έμžμ—΄ νƒ€μž…μ€ ν…μŠ€νŠΈ 데이터λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€. 6.3 ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄ ES6λΆ€ν„° ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄μ΄λΌκ³  ν•˜λŠ” μƒˆλ‘œμš΄ λ¬Έμžμ—΄ ν‘œκΈ°λ²•μ΄ λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 백틱을 μ‚¬μš©ν•©λ‹ˆλ‹€. 6.4 λΆˆλ¦¬μ–Έ νƒ€μž… λΆˆλ¦¬μ–Έ νƒ€μž…μ˜ 값은 논리적 μ°Έ, 거짓을 λ‚˜νƒ€λ‚΄λŠ” true와 false λΏμž…λ‹ˆλ‹€. 6.5 undefined νƒ€μž… undefined νƒ€μž…μ˜ 값은 undefinedκ°€ μœ μΌν•©λ‹ˆλ‹€. undefinedλŠ” κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ ν• λ‹Ήν•˜κΈ° μœ„ν•œ 값이 μ•„λ‹ˆλΌ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•  λ•Œ μ‚¬μš©ν•˜λŠ” κ°’μž…λ‹ˆλ‹€. λ³€μˆ˜μ— 값이 μ—†λ‹€λŠ” 것을 λͺ…μ‹œν•˜κ³  싢을 λ•ŒλŠ” ..

λ°˜μ‘ν˜•