2021-01-05(Tue)
νλͺ©
λ΄μ©
νμ΅ λ μ§
2021-01-05(ν)
νμ΅ μκ°
12:00~24:00
νμ΅ λ²μ λ° μ£Όμ
루λΉμ¨λ μΌμ¦ ν΄λΌμ΄μΈνΈ κ°λ° - Sprockets, Asset pipeline
νμ΅ λͺ©ν
νΌννΈ λ£¨λΉμ¨λ μΌμ¦μ ν΄λΌμ΄μΈνΈ κ°λ°μ λν λ΄μ©μ νκ³ νΈλ μ λμ€ κ΅¬νμ νμν κ°λ μ μμ§ν΄λλ€.
λλ£ νμ΅ λ°©λ²
eunhkim, jujeong, sanam, yohlee λκ³Ό λμ€μ½λλ‘ νμ΅μκ° κ³΅μ + νμ΅λ―Έν μ μ§ννλ€.
μμΈ νμ΅ λ΄μ©
λ μΌμ¦ ν΄λΌμ΄μΈνΈ κ°λ°μ λν΄μ μ± μ νμλ€. μ΄ κ³Όμ μμ Sprocketsλ§ μ± μ μ νμλλ° Asset νμΌ κ΅¬μ‘°κ° Rails 6μ λ¬λΌμ κΉκ² ν보μλλ webpackerμ κΈ°λ₯μ΄ λλμ΄μ§ μν©μμ μκ² λμλ€. μ΄ λΆλΆκΉμ§ ν λ νμμ΄ μμκΈ°μ μ 리ν΄μ 곡μ νμλ€. Ajax, ν°λ³΄νμ΄μ§ λ±μ μ€μ΅ν΄λ³΄μ§λ μμμ§λ§ κ°λ μ νμΈν΄λμΌλ μΆν Rails κ°λ°μ μ μ©μν€λ©΄ λ κ² κ°λ€.
backbone jsλ₯Ό νμ΅νκΈ° μ μ μ°μ javascriptμ λν νμ΅μ΄ μ νλμ΄μΌν¨μ νμΈνλ€. λΉ λ₯΄κ² TCP Schoolμ νμλ€.
μλλ νμ΅ν λ΄μ©μ λ©λͺ¨μ΄λ€.
Rails ν΄λΌμ΄μΈνΈ κ°λ°
Sprockets vs Webpacker
μ°μ μμ κ°λ μ μ§μ. μ μ (Asset)μ΄λ μλ°μ€ν¬λ¦½νΈ μ½λ, μ€νμΌμνΈ, κ·Έλ¦Όμ²λΌ μ ν리μΌμ΄μ μμ λ€λ£¨λ λͺ¨λ 리μμ€μ μ΄μΉμ΄λ€.
Rails4 μμλ μμ μ μ½μ΄λ€μ΄κΈ° μν΄ Sprockets λΌλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ€. Rails6 μμλ Sprockets λ§κ³ λ WebpackerλΌλ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν¨κ» μ¬μ©νλ€. κ°μ΄ μ¬μ©νλ μ΄μ λ₯Ό μ°Ύμ보λ Webpackerλ μλ°μ€ν¬λ¦½νΈ μμ€νμΌμ λ€λ£¨λλ° μ°κ³ , Sprocketsλ λλ¨Έμ§ μ λΆλ₯Ό λ€λ£¨λλ° μ°λ κ² κ°λ€.
"Rails way": Webpacker to compile JavaScript, Sprockets for CSS, images, and fonts
μ΄μ°¨νΌ λ λΌμ΄λΈλ¬λ¦¬λ μλ‘ μμ‘΄μ±μ 1λ κ°μ§κ³ μμ§ μλ€. λ°λΌμ Sprocketsλ§ μ°κ±°λ Webpackerλ§ μ°λ κ²λ μ ν¨νλ€. μ¦, λ λ€ μ νμ§λ‘ μ‘΄μ¬νλ€λ μλ¦¬κ³ μν©μ λ°λΌ μ νν΄μΌν λ¬Έμ λ€. μλ μμλ₯Ό μ°Έκ³ νμ.
Sprocketsμ μΈ μ΄μ (μν©)
λ΄ Rails μ±μ΄ μλ°μ€ν¬λ¦½νΈλ₯Ό λ§μ΄ μ μ΄λ€.
μ μ μ€ν¬λ¦½νΈμ jQueryλ₯Ό μ νΈνλ€. μλ₯Ό λ€μ΄ μλ°μ€ν¬λ¦½νΈ λͺ¨λ μμ€ν μ μΈ νμκ° μλ μν©μ΄λ€.
legacy Rails μ±μ Webpackerλ‘ μ κ·Έλ μ΄λ λΉμ©μ΄ λ λΉμΈλ€.
λ‘컬 κ°λ°μ μν΄ κ³ κΈ ν΄λ§(tooling)μ ν νμκ° μλ€.
κ± λμκ°λ μλΉμ€λ₯Ό λ§λ€κΈ°λ₯Ό μνλ€. λ§ μ’μ λμμ μ°Ύμ μκ°μ΄ μλ€.
λ΄ Rails μ±μ΄ νΉμ gemμ μ¬μ©νλ©°, NPMμ λμ ν μ μλ€.
Sprocketsλ₯Ό μ°μ§ μμ μ΄μ (μν©)
Sprocketsλ λ‘컬κ°λ°νκ²½μμ λ리λ€.
assetμ μ’ λ μ¬μΈνκ² μ μ΄ν΄μΌνλ€.
λ΄ μ±μλ JavaScriptκ° λ§κ³ λλμ νμ΄λ‘λλ₯Ό λ°©μ§νκΈ° μν΄ μ½λ λΆν κΈ°λ₯μ΄ νμνλ€.
μ₯κΈ°μ μΌλ‘ μ§μμ μ μ§ν μλΉμ€λ€.
Webpackerλ₯Ό μΈ μ΄μ (μν©)
μμ‘΄μ± κ΄λ¦¬νλλ° μλ°μ€ν¬λ¦½νΈ λͺ¨λ μμ€ν μ μ°λ κ²μ μ νΈνλ€. μλ₯Ό λ€μ΄ μ μ μ€μ½νκ° μ€μΌλμκ±°λ λͺ μμ μΈ μ’ μμ± κ·Έλνκ° μꡬλλ€.
ES6+, Babel, PostCSμ μ΅μ²¨λ¨ κΈ°λ₯μ νμ©νκ³ μΆλ€.
λμ κ°μ Έμ€κΈ° λ° μΉ ν©μ splitChunks μ΅μ νμ κ°μ μ§λ₯ν μ½λ λΆν κΈ°λ₯μ μνλ€.
λΉλ μμ€ν μμ μμ€ λ§΅μ μμ±νλ λ°©μμΌλ‘ λ λ§μ μ μ°μ±μ μνλ€.
hot module replacement κ°μ κ³ κΈ ν΄λ§(tooling)μ΄ νμνλ€.
μ±κΈ νμ΄μ§ μ±μ λ§λ€κ³ μΆλ€. μ, λ¬Όλ‘ Webpackμ μ°λ €κ³ μ±κΈ νμ΄μ§ μ±μ λ§λ€ νμλ μλ€. Webpackμ λ©ν° νμ΄μ§ μ±μμ λ μ μλνλ€.
Webpackerλ₯Ό μ°μ§ μμ μ΄μ (μν©)
λ΄ Rails μ±μ΄ μλ°μ€ν¬λ¦½νΈλ₯Ό λ§μ΄ μμ΄λ€.
μλ°μ€ν¬λ¦½νΈ μμ½μμ€ν μ λν΄μ μ§μμ΄ λΆμ‘±νλ€.
webpackκ³Ό Webpacker νμ΅μ μκ°μ μΈ μκ° μλ€.
λ 볡μ‘ν΄λ³΄μΈλ€.
Sprocketsλ‘ μλ°μ€ν¬λ¦½νΈ, μ€νμΌμνΈ μν¬νΈ
Sprocketsλ μμ
μ 맀λνμ€νΈ, μ¦ λ―Έλ¦¬ μ€λΉλ 리μμ€λ‘ μ½μ΄λ€μΈλ€. app/assets
ν΄λλ₯Ό νμΈνμ.
맀λνμ€νΈ μ μλ κ°κ° μ£Όμ(//, /* ~ */)μ λ΄λΆμ =<μ§μμ> <λ§€κ° λ³μ>
μ νμμΌλ‘ νκΈ°νλ€.
μ°Έκ³ λ‘ Railsλ ν΄λΌμ΄μΈνΈ μ¬μ΄λ κ°λ° μΈμ΄λ‘ 컀νΌμ€ν¬λ¦½νΈμ SCSSλ₯Ό νμ€μΌλ‘ μ§μνκ³ μλ€. νμ§λ§ λ°λμ μ¬μ©ν νμλ μλ€.
μμ
νμ΄νλΌμΈ(Asset Pipeline)
μμ νμ΄νλΌμΈμ Sprockets λΌμ΄λΈλ¬λ¦¬λ‘ μ 곡λλ ꡬ쑰λ‘, μλ°μ€ν¬λ¦½νΈμ μ€νμΌμνΈ, μ΄λ―Έμ§ λ±μ μ κ·Όμ νκΊΌλ²μ κ΄λ¦¬νκ³ μ¬μ©μμκ² λ³΄λ€ ν¨μ¨μ μΌλ‘ μλ΅ν΄μ£Όλ κΈ°λ₯μ μ 곡νλ€.
μ± μμ λ¬μ¬λ Rails4 κΈ°μ€ μμ νμ΄νλΌμΈμ μλ κ³Όμ μ κ±°μΉλ€.
μλ μμ€ μ½λ ex)
articles.js.coffee
,photos.css.scss
μ»΄νμΌ ex)
article.js
,photos.css
κ²°ν© ex) κ°κ°
application.js
,application.css
μ κ²°ν©λ¨.μμΆ
μλ μ½λμμ μ£Όμμ΄λ κ°ν, 곡백 λ±μ μ κ±°νλ κ²μ λ§νλ€. ex) κ°κ°
application.js
,application.css
μ μμΆλ¨.λ€μ΄μ μ€νΈ μΆκ°
μ½λμ λ΄μ©μ κΈ°λ°μΌλ‘ ν΄μ(λ€μ΄μ μ€νΈ)λ₯Ό μ°μ°ν΄μ νμΌμ λ§μ§λ§μ λΆμΈλ€. μ΄λ λΈλΌμ°μ μμ μλνμ§ μμ μΊμ μ¬μ©μ νΌνκΈ° μν΄μμ΄λ€. μ½λκ° λ³κ²½λ λ νμΌ μ΄λ¦μ κ°μ μ μΌλ‘ ν¨κ» λ³κ²½νλ―λ‘ λΈλΌμ°μ κ° μ΄μ μ μμ μ½λλ₯Ό μ¬νμ©νλ μΌ μμ΄ μμ μμ μ΄ μ€μκ°μΌλ‘ λ°μλλ€. ex) κ°κ°
application-xxxx.js
,application-xxxx.css
λ‘ λ€μ΄μ μ€νΈ μΆκ°λ¨.
μ΄ λ κ°λ° νκ²½μ 2λ²(μ»΄νμΌ) κ³Όμ μ κ±°μΉ νμ λ°λ‘ μΆλ ₯ν΄λ²λ¦°λ€.
λ°λ©΄ λ°°ν¬ νκ²½μ 2λ² κ³Όμ μ 건λλ°κ³ λ°λ‘ 3(κ²°ν©), 4(μμΆ), 5(λ€μ΄μ μ€νΈ μΆκ°) κ³Όμ μ κ±°μΉλ€.
Ajax κ°λ°
Ajax(Asynchronous JAvascript + Xml)μ λΈλΌμ°μ μμμ λ°μ€ν¬ν± μ ν리μΌμ΄μ μ²λΌ λ€μν ννμ κ°λ₯νκ² νλ κΈ°μ μ΄λ€. μ΄λ¬ν κΈ°μ λ‘ κ΅¬νλ μΉ μ ν리μΌμ΄μ μ RIA(Rich Internet Applications)λΌκ³ λΆλ₯΄κΈ°λ νλ€. RIA κΈ°μ ꡬν λ°©λ²μ νλμλ μ€λ²λΌμ΄νΈ κ°μ κΈ°μ κ³Ό Ajax κΈ°μ μ΄ μλ€. νλμμ μ€λ²λΌμ΄νΈλ νλ¬κ·ΈμΈμ μ¬μ©ν΄μΌνμ§λ§ Ajaxλ μΉ νμ€ κΈ°μ λ§μΌλ‘ μλνλ€λ μ μ΄ λ€λ₯΄λ€. μ°Έκ³ λ‘ νλμλ μ¬μ₯λμλ€.
Ajaxλ₯Ό μ¬μ©νλ©΄ λΉλκΈ° ν΅μ μ΄ λλ€. λ°λΌμ νμ΄μ§ μ μ²΄κ° μλ‘κ³ μΉ¨λ λκΉμ§ κΈ°λ€λ¦΄ νμλ μλ€.
Javascript
javascriptλ₯Ό νμ΅νλ©° κ°λ¨νκ² λ©λͺ¨ν©λλ€.
μλ°μ€ν¬λ¦½νΈ νΉμ§
νμ¬ μλ°μ€ν¬λ¦½νΈμ μ΅μ νμ€μ 2015λ μ λ°νλ ECMAScript 6μ΄λ€.
νμ
μλ°μ€ν¬λ¦½νΈμ κΈ°λ³Έ νμ μ μμ νμ κ³Ό κ°μ²΄ νμ μΌλ‘ ꡬλΆν μ μλ€.
μμ νμ
(primitive type)
μ«μ(number)
μλ°μ€ν¬λ¦½νΈλ λͺ¨λ μλ₯Ό μ μ, μ€μ κ΅¬λΆ μμ΄ μ€μ νλλ‘λ§ νκΈ°νλ€.
λ¬Έμμ΄(string)
μλ°μ€ν¬λ¦½νΈμμλ μ«μμ λ¬Έμμ΄μ λν μλ μλ€. μ΄λ΄ κ²½μ°μ μ«μλ₯Ό λ¬Έμμ΄λ‘ μλ νλ³νν΄μ, λ λ¬Έμμ΄μ μ°κ²°νλ μ°μ°μ μννλ€.
λΆλ¦¬μΈ(boolean)
μ¬λ³Ό(symbol): ECMAScript 6λΆν° μ 곡λ¨. μ¬λ³Όμ μ μΌνκ³ λ³κ²½ν μ μλ νμ μΌλ‘, κ°μ²΄μ νλ‘νΌν°λ₯Ό μν μλ³μλ‘ μ¬μ©ν μ μλ€. μ΅μ€νλ‘λ¬μμλ μ§μνμ§ μλλ€.
undefined nullκ³Ό ꡬλ³νμ. nullμ object νμ μ΄λ©°, μμ§ 'κ°'μ΄ μ ν΄μ§μ§ μμ κ²μ μλ―Ένλ€. λν, undefinedλ nullκ³Όλ λ¬λ¦¬ 'νμ 'μ΄ μ ν΄μ§μ§ μμ κ²μ μλ―Ένλ€. λ°λΌμ μλ°μ€ν¬λ¦½νΈμμ undefinedλ μ΄κΈ°νλμ§ μμ λ³μλ μ‘΄μ¬νμ§ μλ κ°μ μ κ·Όν λ λ°νλλ€.
nullκ³Ό undefiendλ λλ± μ°μ°μ(==)μ μΌμΉ μ°μ°μ(===)λ‘ λΉκ΅ν λ κ·Έ κ²°κ³Όκ°μ΄ λ€λ₯΄λ―λ‘ μ£Όμνμ.
μ°Έμ‘°λ°μ΄ν° νμ
μ°Έμ‘° λ°μ΄ν° νμ μλ κ°μ²΄(object)κ° μλ€.
ν λ³ν
묡μμ νμ
λ³ν
μ λ§νλ©΄ νΉμ νμ μ κ°μ κΈ°λνλ κ³³μ λ€λ₯Έ νμ μ κ°μ΄ μ€λ©΄, μλμΌλ‘ νμ μ λ³ννμ¬ μ¬μ©νλ€.
1 - "λ¬Έμμ΄";
μ²λΌ μμ νλ³νμ΄ λΆκ°λ₯ν κ²½μ° NaN
κ°μ λ°ννλ€.
λͺ
μμ νμ
λ³ν
λͺ μμ νμ λ³νμ μν΄ μλ°μ€ν¬λ¦½νΈκ° μ 곡νλ μ μ ν¨μλ μλμ κ°λ€.
Number()
String()
Boolean()
Object()
parseInt()
parseFloat()
λ³μ
μλ°μ€ν¬λ¦½νΈμμλ var ν€μλλ₯Ό μ¬μ©νμ¬ λ³μλ₯Ό μ μΈνλ€.
λ§μ½ μ μΈλμ§ μμ λ³μμ μ¬μ©νλ €νκ±°λ μ κ·Όνλ©΄ μ€λ₯κ° λ°μνλ€. λ¨, μ μΈλμ§ μμ λ³μλ₯Ό μ΄κΈ°νν κ²½μ°μλ μλμΌλ‘ μ μΈμ λ¨Όμ ν ν μ΄κΈ°νλ₯Ό μ§ννλ€.
μ..? κ·Έλ¦¬κ³ μ»΄νμΌ λ¨κ³κ° μλ μΈν°νλ¦¬ν° μΈμ΄μ΄λ€λ³΄λ λ³μ μ¬μ μΈμ μ»΄νμΌ μλ¬κ° λ μκ° μμΌλ―λ‘ κ± λ³μ μ¬μ μΈ λ¬Έκ΅¬κ° λ¬΄μλλ€.
μ°μ°μ
λλ±μ°μ°μμ μΌμΉ μ°μ°μλ₯Ό 체ν¬νμ.
λΉκ΅ μ°μ°μ
μ€λͺ
===
μΌμͺ½ νΌμ°μ°μμ μ€λ₯Έμͺ½ νΌμ°μ°μμ κ°μ΄ κ°κ³ , κ°μ νμ μ΄λ©΄ μ°Έμ λ°ν.
==
μΌμͺ½ νΌμ°μ°μμ μ€λ₯Έμͺ½ νΌμ°μ°μμ κ°μ΄ κ°μΌλ©΄ μ°Έμ λ°ν.
!=
μΌμͺ½ νΌμ°μ°μμ μ€λ₯Έμͺ½ νΌμ°μ°μμ κ°μ΄ κ°μ§ μμΌλ©΄ μ°Έμ λ°ν.
!==
μΌμͺ½ νΌμ°μ°μμ μ€λ₯Έμͺ½ νΌμ°μ°μμ κ°μ΄ κ°μ§ μκ±°λ, νμ μ΄ λ€λ₯΄λ©΄ μ°Έμ λ°ν.
μλ°μ€ν¬λ¦½νΈμμ νΌμ°μ°μκ° λ λ€ λ¬Έμμ΄μ΄λ©΄, λ¬Έμμ΄μ 첫 λ²μ§Έ λ¬ΈμλΆν° μνλ²³ μμλλ‘ λΉκ΅νλ€.
λΉνΈ μ°μ°μ, μΌν μ°μ°μ, delete, typeof μ°μ°μλ C, C++μ΄λ λμΌνλ€.
instanced μ°μ°μλ νΌμ°μ°μμΈ κ°μ²΄κ° νΉμ κ°μ²΄μ μΈμ€ν΄μ€μΈμ§ μλμ§λ₯Ό νμΈν΄μ€λ€.
void μ°μ°μλ νΌμ°μ°μλ‘ μ΄λ€ νμ μ΄ μ€λμ§ μκ΄μμ΄ μΈμ λ undefined κ°λ§μ λ°ννλ€.
λ°λ³΅λ¬Έ
for / in λ¬Έ
for / in λ¬Έμ ν΄λΉ κ°μ²΄μ λͺ¨λ μ΄κ±°ν μ μλ νλ‘νΌν°(enumerable properties)λ₯Ό μνν μ μλλ‘ ν΄μ€λ€. λ€μ νλ² λ§νμ§λ§, for / in λ¬Έμ ν΄λΉ κ°μ²΄κ° κ°μ§ λͺ¨λ νλ‘νΌν°λ₯Ό λ°ννλ κ²μ΄ μλ, μ€μ§ μ΄κ±°ν μ μλ νλ‘νΌν°λ§μ λ°ννλ€.
for / of λ¬Έ
for / of λ¬Έμ λ°λ³΅ν μ μλ κ°μ²΄(iterable objects)λ₯Ό μνν μ μλλ‘ ν΄μ£Όλ λ°λ³΅λ¬Έμ΄λ€.
μλ°μ€ν¬λ¦½νΈμμ λ°λ³΅ν μ μλ κ°μ²΄μλ Array, Map, Set, arguments κ°μ²΄ λ±μ΄ μλ€.
for / of λ¬Έμ μ΅μ€νλ‘λ¬μμ μ§μνμ§ μλλ€.
루ν μ μ΄ - label λ¬Έ
μΌλ°μ μΌλ‘ ννμμ κ²μ¬λ₯Ό ν΅ν΄ 루νλ‘ μ§μ νλ©΄, λ€μ ννμμ κ²μ¬νκΈ° μ κΉμ§ 루ν μμ μλ λͺ¨λ μ€νλ¬Έμ μ€ννλ€. νμ§λ§ continue λ¬Έκ³Ό break λ¬Έμ μ΄λ¬ν μΌλ°μ μΈ λ£¨νμ νλ¦μ μ¬μ©μκ° μ§μ μ μ΄ν μ μκ² ν΄μ€λ€.
label λ¬Έμ μ¬μ©νλ©΄ continue λ¬Έκ³Ό break λ¬Έμ λμμ΄ νλ‘κ·Έλ¨μ νλ¦μ νΉμ μμμΌλ‘ μ΄λμν¬ μ μλ€. λ¬Έλ²μ μλμ κ°λ€.
μμλ μλμ κ°λ€.
μμ1) νμμ λν΄μλ§ κ΅¬κ΅¬λ¨ μ μ©.
μμ2) 3λ¨κΉμ§λ§ κ΅¬κ΅¬λ¨ μ μ©
λ°°μ΄(array)
μλ°μ€ν¬λ¦½νΈμμ λ°°μ΄(array): μ΄λ¦κ³Ό μΈλ±μ€λ‘ μ°Έμ‘°λλ μ λ ¬λ κ°μ μ§ν©
λ°°μ΄μ ꡬμ±νλ κ°κ°μ κ°μ λ°°μ΄ μμ(element)λΌκ³ νλ©°, λ°°μ΄μμμ μμΉλ₯Ό κ°λ¦¬ν€λ μ«μλ₯Ό μΈλ±μ€(index)λΌκ³ νλ,
μλ°μ€ν¬λ¦½νΈμμ λ°°μ΄μ νΉμ§μ λ€μκ³Ό κ°μ΅λλ€.
λ°°μ΄ μμμ νμ μ΄ κ³ μ λμ΄ μμ§ μμΌλ―λ‘, κ°μ λ°°μ΄μ μλ λ°°μ΄ μμλΌλ¦¬μ νμ μ΄ μλ‘ λ€λ₯Ό μλ μλ€.
λ°°μ΄ μμμ μΈλ±μ€κ° μ°μμ μ΄μ§ μμλ λλ©°, λ°λΌμ νΉμ λ°°μ΄ μμκ° λΉμ΄ μμ μλ μλ€.
μλ°μ€ν¬λ¦½νΈμμ λ°°μ΄μ Array κ°μ²΄λ‘ λ€λ€μ§λ€.
λ°°μ΄ μμ±
μμ± λ°©μμ 3κ°μ§κ° μμΌλ©° λͺ¨λ κ°μ κ²°κ³Όμ λ°°μ΄μ λ§λ€μ΄ μ€λ€.
var arr = [λ°°μ΄μμ1, λ°°μ΄μμ2,...]; // λ°°μ΄ λ¦¬ν°λ΄μ μ΄μ©νλ λ°©λ²
var arr = Array(λ°°μ΄μμ1, λ°°μ΄μμ2,...); // Array κ°μ²΄μ μμ±μλ₯Ό μ΄μ©νλ λ°©λ²
var arr = new Array(λ°°μ΄μμ1, λ°°μ΄μμ2,...); // new μ°μ°μλ₯Ό μ΄μ©ν Array κ°μ²΄ μμ± λ°©λ²
λ°°μ΄ μμμ μΆκ°
λ°°μ΄μ μμλ₯Ό μΆκ°νλ λ°©λ²μ 3κ°μ§κ° μλ€.
push() λ©μλμ length νλ‘νΌν°λ₯Ό μ΄μ©ν λ°©λ²μ λͺ¨λ λ°°μ΄μ μ μΌ λμ μλ‘μ΄ μμλ₯Ό μΆκ°νλ€.
μΈλ±μ€μ λμνλ λ°°μ΄ μμκ° μλ λΆλΆμ λ°°μ΄μ ν(hole)μ΄λΌκ³ νλ€. μλ°μ€ν¬λ¦½νΈμμλ μ΄λ¬ν λ°°μ΄μ νμ undefined κ°μ κ°μ§λ μμμ²λΌ μ·¨κΈνλ€.
ν¬μ λ°°μ΄
ν¬μ λ°°μ΄μ΄λ λ°°μ΄μ μν μμμ μμΉκ° μ°μμ μ΄μ§ μμ λ°°μ΄μ μλ―Ένλ€.
μ°κ΄ λ°°μ΄
μ«μλ‘ λ μΈλ±μ€ λμ μ λ¬Έμμ΄λ‘ λ ν€(key)λ₯Ό μ¬μ©νλ λ°°μ΄μ μ°κ΄ λ°°μ΄(associative array)μ΄λΌκ³ νλ€. μλ°μ€ν¬λ¦½νΈλ μ°κ΄ λ°°μ΄μ λ³λλ‘ μ 곡νμ§λ μμ§λ§, μΈλ±μ€λ‘ λ¬Έμμ΄μ μ¬μ©νμ¬ μ°κ΄ λ°°μ΄μ²λΌ μ¬μ©ν μ μλ κ°μ²΄(object)λ₯Ό λ§λ€ μ μλ€.
μ΄λ κ² μμ±λ λ°°μ΄μ μλ°μ€ν¬λ¦½νΈ λ΄λΆμ μΌλ‘ Array κ°μ²΄κ° μλ κΈ°λ³Έ κ°μ²΄λ‘ μ¬μ μΈλλ€. μ¦, μ°κ΄ λ°°μ΄μ Array κ°μ²΄κ° μλλ―λ‘ length νλ‘νΌν°μ κ°μ΄ 0 μ΄κ³ μ«μλ₯Ό μΈλ±μ€λ‘ νμ¬ μμμ μ κ·Όνλ©΄ undefinedλ₯Ό νμΈνκ² λλ€.
ECMAScript6 λΆν°λ μ΄λ¬ν λΆνΈν¨μ ν΄κ²°νκΈ° μν΄ μλ‘μ΄ λ°μ΄ν° κ΅¬μ‘°μΈ Map κ°μ²΄λ₯Ό λ³λλ‘ μ 곡νκ³ μλ€.
μλ°μ€ν¬λ¦½νΈμμ λ°°μ΄ μ¬λΆ νμΈ
μλ°μ€ν¬λ¦½νΈμμλ ν΄λΉ λ³μκ° λ°°μ΄μΈμ§ μ¬λΆλ₯Ό νμΈν μ μλλ‘ λ€μκ³Ό κ°μ λ°©λ²λ€μ μ 곡νκ³ μλ€.
Array.isArray() λ©μλ
instanceof μ°μ°μ
constructor νλ‘νΌν°
λν Array κ°μ²΄μ constructor νλ‘νΌν°λ₯Ό μ¬μ©νμ¬ λ°°μ΄ μ¬λΆλ₯Ό νμΈν μλ μλ€. μμλ₯Ό 보면 λλ€.
μλ°μ€ν¬λ¦½νΈ ν¨μ
μλ°μ€ν¬λ¦½νΈμμλ ν¨μλ νλμ νμ (datatype)μ΄λ€.
λ°λΌμ ν¨μλ₯Ό λ³μμ λμ νκ±°λ, ν¨μμ νλ‘νΌν°λ₯Ό μ§μ νλ κ²λ κ°λ₯νλ€. λν μλ°μ€ν¬λ¦½νΈ ν¨μλ λ€λ₯Έ ν¨μ λ΄μ μ€μ²©λμ΄ μ μλ μλ μλ€.
κ°μΌλ‘μμ ν¨μ
μλ°μ€ν¬λ¦½νΈμμ ν¨μλ λ¬Έλ²μ ꡬ문μΌλΏλ§ μλλΌ κ°(value)μ΄κΈ°λ νλ€. λ°λΌμ ν¨μκ° λ³μμ λμ λ μλ μμΌλ©°, λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬λ μλ μλ€.
λ³μ μ€μ½ν
μ§μ λ³μ(local variable)
ν¨μ λ΄μμ μ μΈλ λ³μ. λ³μκ° μ μΈλ ν¨μ λ΄μμλ§ μ ν¨νλ©°, ν¨μκ° μ’ λ£λλ©΄ λ©λͺ¨λ¦¬μμ μ¬λΌμ§λ€.
μ μ λ³μ(global variable)
μ μ λ³μ(global variable)λ ν¨μμ μΈλΆμμ μ μΈλ λ³μλ₯Ό κ°λ¦¬ν¨λ€. μ΄λ¬ν μ μ λ³μλ νλ‘κ·Έλ¨μ μ΄λ μμμμλ μ κ·Όν μ μμΌλ©°, μΉ νμ΄μ§κ° λ«νμΌλ§ λ©λͺ¨λ¦¬μμ μ¬λΌμ§λ€.
μλ°μ€ν¬λ¦½νΈμμ μ§μ λ³μλ₯Ό μ μΈν λμλ λ°λμ var ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈν΄μΌ νλ€. ν¨μ λ΄λΆμμ var ν€μλλ₯Ό μ¬μ©νμ§ μκ³ λ³μλ₯Ό μ μΈνλ©΄, ν΄λΉ λ³μλ μ§μ λ³μκ° μλ μ μ λ³μλ‘ μ μΈλλ€.
λν, μ μ λ³μμ κ°μ μ΄λ¦μ μ§μ λ³μλ₯Ό μ μΈνλ©΄, ν΄λΉ λΈλ‘μμλ ν΄λΉ μ΄λ¦μΌλ‘ μ§μ λ³μλ§μ νΈμΆν μ μλ€.
λ¬Όλ‘ μ΄ κ²½μ°μ μ μ λ³μκ° window κ°μ²΄μ νλ‘νΌν°μμ λͺ μνλ©΄ μ μ λ³μλ₯Ό νΈμΆν μλ μλ€.
ν¨μ μ€μ½ν
λΈλ‘(block)μ΄λ μ½λ λ΄μμ μ€κ΄νΈ({})λ‘ λλ¬μΈμΈ λΆλΆμ κ°λ¦¬ν€λ©°, λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μμλ λΈλ‘ λ΄μμ μ μλ λ³μλ₯Ό λΈλ‘ μΈλΆμμλ μ κ·Όν μ μλ€.
νμ§λ§ μλ°μ€ν¬λ¦½νΈλ λ€λ₯Έ μΈμ΄μ λ¬λ¦¬ ν¨μλ₯Ό λΈλ‘ λμ μ¬μ©νλ€.
'μ μ ν¨μ'λ λͺ¨λ μ μ λ³μμ μ μ ν¨μμ μ κ·Όν μ μλ€.
λ°λ©΄, λ€λ₯Έ ν¨μ λ΄μ μ μλ 'λ΄λΆ ν¨μ'λ κ·Έ ν¨μμ λΆλͺ¨ ν¨μ(parent function)μμ μ μλ λͺ¨λ λ³μ λ° λΆλͺ¨ ν¨μκ° μ κ·Όν μ μλ λͺ¨λ λ€λ₯Έ λ³μκΉμ§λ μ κ·Όν μ μλ€.
μλ μμλ₯Ό μ°Έκ³ .
ν¨μ νΈμ΄μ€ν (hoisting)
μλ°μ€ν¬λ¦½νΈμμ ν¨μμ μ ν¨ λ²μλΌλ κ²μ ν¨μ μμμ μ μΈλ λͺ¨λ λ³μλ ν¨μ μ 체μ κ±Έμ³ μ ν¨νλ€λ μλ―Έμ΄λ€.
κ·Έλ°λ° μ΄ μ ν¨ λ²μμ μ μ©μ΄ λ³μκ° μ μΈλκΈ° μ μλ λκ°μ΄ μ μ©λλ€. μ΄λ¬ν μλ°μ€ν¬λ¦½νΈμ νΉμ§μ ν¨μ νΈμ΄μ€ν (hoisting)μ΄λΌκ³ νλ€. μ¦, μλ°μ€ν¬λ¦½νΈ ν¨μ μμ μλ λͺ¨λ λ³μμ μ μΈμ ν¨μμ 맨 μ²μμΌλ‘ μ΄λλ κ²μ²λΌ λμνλ€.
μλ μμ λ₯Ό 보μ.
β μμ μ μλ³μλ₯Ό μ°Έμ‘°ν κ² κ°μ§λ§ μλλ€. νΈμ΄μ€ν μ΄ μ μ©λμ΄ μλμ²λΌ μ½λκ° λ°λκΈ° λλ¬Έ.
맀κ°λ³μμ μΈμ
μλ°μ€ν¬λ¦½νΈμμλ ν¨μλ₯Ό μ μν λλ 맀κ°λ³μμ νμ μ λ°λ‘ λͺ μνμ§ μλλ€. ν¨μλ₯Ό νΈμΆν λμλ μΈμ(argument)λ‘ μ λ¬λ κ°μ λν΄ μ΄λ ν νμ κ²μ¬λ νμ§ μλλ€.
ν¨μλ₯Ό νΈμΆν λ ν¨μμ μ μλ³΄λ€ μ μ μμ μΈμκ° μ λ¬λλλΌλ, λ€λ₯Έ μΈμ΄μλ λ¬λ¦¬ μ€λ₯λ₯Ό λ°μμν€μ§ μλλ€.
μ΄ κ°μ κ²½μ° μλ°μ€ν¬λ¦½νΈλ μ λ¬λμ§ μμ λλ¨Έμ§ λ§€κ°λ³μμ μλμΌλ‘ undefined κ°μ μ€μ νλ€.
arguments κ°μ²΄
λ§μ½ ν¨μμ μ μλ³΄λ€ λ λ§μ μμ μΈμκ° μ λ¬λλ©΄, 맀κ°λ³μμ λμ λμ§ λͺ»ν μΈμλ€μ μ°Έμ‘°ν λ°©λ²μ΄ μκ² λλ€.
νμ§λ§ arguments κ°μ²΄λ₯Ό μ΄μ©νλ©΄, ν¨μλ‘ μ λ¬λ μΈμμ μ΄ κ°μλ₯Ό νμΈνκ±°λ, κ°κ°μ μΈμμλ λ°λ‘ μ κ·Όν μ μλ€.
arguments κ°μ²΄λ ν¨μκ° νΈμΆλ λ μ λ¬λ μΈμλ₯Ό λ°°μ΄μ ννλ‘ μ μ₯νκ³ μλ€. 첫 λ²μ§Έ μΈμλ arguments[0]μ μ μ₯λλ©°, λ€μ μΈμλ arguments[1]μ μ μ₯λλ€. λν, μΈμμ μ΄ κ°μλ arguments κ°μ²΄μ length νλ‘νΌν°μ μ μ₯λλ€.
λν΄νΈ 맀κ°λ³μμ λλ¨Έμ§ λ§€κ°λ³μ
ECMAScript 6λΆν° μλ‘κ² μ μλ 맀κ°λ³μλ λ€μκ³Ό κ°λ€.
λν΄νΈ 맀κ°λ³μ(default parameter) μλ°μ€ν¬λ¦½νΈμμ 맀κ°λ³μμ κΈ°λ³Έκ°μ undefined κ°μΌλ‘ μ€μ λμ΄ μλ€.
λλ¨Έμ§ λ§€κ°λ³μ(rest parameter) λλ¨Έμ§ λ§€κ°λ³μλ μλ΅ μ λμ¬(...)λ₯Ό μ¬μ©νμ¬ νΉμ μμΉμ μΈμλΆν° λ§μ§λ§ μΈμκΉμ§λ₯Ό ν λ²μ μ§μ ν μ μλ€. μ΄κ±΄ μμ λ₯Ό 보μ.
미리 μ μλ μ μ ν¨μ(predefined functions)
μλ°μ€ν¬λ¦½νΈλ μ¬μ©μμ νΈμλ₯Ό μν΄ λ€μν κΈ°λ₯μ μ¬λ¬ μ μ ν¨μλ₯Ό 미리 μ μνμ¬ μ 곡νλ€. μ΄λ¬ν μ μ ν¨μλ μλ°μ€ν¬λ¦½νΈμ μ΄λ€ νμ μ κ°μ²΄μμλ λ°λ‘ μ¬μ©ν μ μλ€.
μλ°μ€ν¬λ¦½νΈμμ 미리 μ μλμ΄ μλ μ μ ν¨μλ λ€μκ³Ό κ°λ€.
eval() : λ¬Έμμ΄λ‘ ννλ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ€ννλ ν¨μ
isFinite() : μ λ¬λ κ°μ΄ μ νν μμΈμ§λ₯Ό κ²μ¬νμ¬ κ·Έ κ²°κ³Όλ₯Ό λ°ν. μΈμλ‘ μ λ¬λ κ°μ΄ μ«μκ° μλλΌλ©΄ μ«μλ‘ λ³ννμ¬ κ²μ¬.
isNaN()
parseFloat()
parseInt()
decodeURI() : encodeURI() ν¨μλ λ€λ₯Έ λ°©λ²μΌλ‘ λ§λ€μ΄μ§ URIλ₯Ό ν΄λ νλ€.
decodeURIComponent()
encodeURI()
encodeURIComponent()
escape()
unescape()
Number()
String()
μλ°μ€ν¬λ¦½νΈ κ°μ²΄
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄μ νλ‘νΌν°λ₯Ό μ°Έμ‘°νλ λ°©λ²μ λ€μκ³Ό κ°λ€.
λ©μλλ₯Ό μ°Έμ‘°ν λ λ©μλ μ΄λ¦ λ€μ κ΄νΈ(())λ₯Ό λΆμ΄μ§ μμΌλ©΄, λ©μλκ° μλ νλ‘νΌν° κ·Έ μ체λ₯Ό μ°Έμ‘°νκ² λλ€. λ°λΌμ κ΄νΈλ₯Ό μ¬μ©νμ§ μκ³ νλ‘νΌν° κ·Έ μ체λ₯Ό μ°Έμ‘°νκ² λλ©΄ ν΄λΉ λ©μλμ μ μ κ·Έ μμ²΄κ° λ°νλλ€.
κ°μ²΄μ μμ±
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μ λ€μκ³Ό κ°λ€.
리ν°λ΄ νκΈ°(literal notation)λ₯Ό μ΄μ©ν λ°©λ²
μμ±μ ν¨μ(constructor function)λ₯Ό μ΄μ©ν λ°©λ²
Object.create() λ©μλλ₯Ό μ΄μ©ν λ°©λ² Object.create() λ©μλλ μ§μ λ νλ‘ν νμ (prototype) κ°μ²΄μ νλ‘νΌν°λ₯Ό κ°μ§κ³ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€μ΄μ€λ€.
λ°λΌμ μ΄ λ©μλλ₯Ό μ΄μ©νλ©΄ μ¬μ©μκ° νλ‘ν νμ κ°μ²΄λ₯Ό μ§μ λͺ μν μ μμΌλ―λ‘, μλΉν μ μ©νκ² μ¬μ©λλ€.
Object.create() λ©μλμ 첫 λ²μ§Έ μΈμλ‘λ νλ‘ν νμ μΌλ‘ μ¬μ©ν κ°μ²΄λ₯Ό μ λ¬νλ€. λ λ²μ§Έ μΈμλ‘λ μλ‘μ΄ κ°μ²΄μ μΆκ°ν νλ‘νΌν° μ 보λ₯Ό μ λ¬νλ€.
νλ‘ν νμ - μμ
C#μ΄λ C++κ³Ό κ°μ ν΄λμ€ κΈ°λ°(class-based)μ κ°μ²΄ μ§ν₯ μΈμ΄μλ λ¬λ¦¬ μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ κΈ°λ°(prototype-based)μ κ°μ²΄ μ§ν₯ μΈμ΄μ΄λ€.
λ°λΌμ μμ λ±μ κ°λ μ΄ μ’ λ€λ₯Έλ°, μλ°μ€ν¬λ¦½νΈμμλ νμ¬ μ‘΄μ¬νκ³ μλ κ°μ²΄λ₯Ό νλ‘ν νμ μΌλ‘ μ¬μ©νμ¬, ν΄λΉ κ°μ²΄λ₯Ό 볡μ νμ¬ μ¬μ¬μ©νλ κ²μ μμμ΄λΌκ³ νλ€.
νλ‘ν νμ
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ²΄λ νλ‘ν νμ (prototype)μ΄λΌλ κ°μ²΄λ₯Ό κ°μ§κ³ μλ€. λͺ¨λ κ°μ²΄λ κ·Έλ€μ νλ‘ν νμ μΌλ‘λΆν° νλ‘νΌν°μ λ©μλλ₯Ό μμ λ°λλ€.
μ΄μ²λΌ μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ²΄λ μ΅μν νλ μ΄μμ λ€λ₯Έ κ°μ²΄λ‘λΆν° μμμ λ°μΌλ©°, μ΄λ μμλλ μ 보λ₯Ό μ 곡νλ κ°μ²΄λ₯Ό νλ‘ν νμ (prototype)μ΄λΌκ³ νλ€.
μ λ¨ νλ, Object.prototype κ°μ²΄λ μ΄λ ν νλ‘ν νμ λ κ°μ§μ§ μμΌλ©°, μλ¬΄λ° νλ‘νΌν°λ μμλ°μ§ μλλ€.
νλ‘ν νμ 체μΈ(prototype chain)
μλ°μ€ν¬λ¦½νΈμμλ κ°μ²΄ μ΄λμ λΌμ΄μ λ₯Ό μ¬μ©ν΄ μμ±λ κ°μ νμ μ κ°μ²΄λ€μ λͺ¨λ κ°μ νλ‘ν νμ μ κ°μ§λ€.
λν, new μ°μ°μλ₯Ό μ¬μ©ν΄ μμ±ν κ°μ²΄λ μμ±μμ νλ‘ν νμ μ μμ μ νλ‘ν νμ μΌλ‘ μμλ°λλ€.
μ΄λ° νλ‘ν νμ μμμ κ°μ μ°κ²°κ³ 리λ₯Ό νλ‘ν νμ 체μΈμ΄λΌκ³ νλ€. Object.prototype κ°μ²΄λ μ΄λ ν νλ‘ν νμ λ κ°μ§μ§ μμΌλ©°, μλ¬΄λ° νλ‘νΌν°λ μμλ°μ§ μλλ€κ³ νμλλ°, Object.prototype κ°μ²΄λ μ΄λ¬ν νλ‘ν νμ 체μΈμμλ κ°μ₯ μμμ μ‘΄μ¬νλ νλ‘ν νμ μ΄κΈ° λλ¬Έμ΄λ€.
Math κ°μ²΄
Math κ°μ²΄λ μνμμ μμ£Ό μ¬μ©νλ μμμ ν¨μλ€μ 미리 ꡬνν΄ λμ μλ°μ€ν¬λ¦½νΈ νμ€ λ΄μ₯ κ°μ²΄μ΄λ€. Math κ°μ²΄λ λ€λ₯Έ μ μ κ°μ²΄μλ λ¬λ¦¬ μμ±μ(constructor)κ° μ‘΄μ¬νμ§ μλλ€. λ°λΌμ λ°λ‘ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ Math κ°μ²΄μ λͺ¨λ λ©μλλ νλ‘νΌν°λ₯Ό λ°λ‘ μ¬μ©ν μ μμ΅λλ€.
λλΆλΆμ Math λ©μλλ μΉ λΈλΌμ°μ λ§λ€ λ€λ₯Έ κ²°κ΄κ°μ μ»μ κ°λ₯μ±μ΄ λλ€. μ¬μ§μ΄ κ°μ μλ°μ€ν¬λ¦½νΈ μΈν°ν리ν°λΌλ μ΄μ체μ κ° λ€λ₯΄λ©΄ λ€λ₯Έ κ²°κ΄κ°μ λ°νν μ μλ€. λ°λΌμ μμ£Ό μ νν κ²°κ΄κ°μ΄ νμν μμ μλ Math λ©μλλ μ¬μ©νμ§ μλ κ²μ΄ μ’λ€.
νμ΅ λ΄μ©μ λν κ°μΈμ μΈ μ΄ν
μ°μ λ²Όλ₯΄κ³ λ²Όλ₯΄λ javascript μ λν νμ΅μ ν μ μμ΄μ μ’μμ΅λλ€. backbone.jsλ₯Ό νμ΅ν μ μλ μ λλ‘λ§ λ± νμ΄μΌκ² μ΅λλ€.
ν λ―Έν λ νμλ€μ λ λ €ν΄μ 곡μ ν λ§ν μ΄μλ₯Ό 곡μ λ°κ³ , λ€μ νμ΅ν κ²μ νμΈνλ νλ¦μ΄ μ μ μ°©λ κ² κ°λ€μ.
νμ΅ μΌμ μ κ²½μ° Railsμ μ€μκ° μ±ν μ λν λ΄μ©κ³Ό backbone.jsμ λν΄μ μ΄λ»κ² νμ΅μ μ΄μ΄λκ°μ§ μ νκ³ , νμ΅ λ°©μμ κ²½μ° κ°μ μ΄ νμνλ€ νλ¨νμ¬ 1) κ°μ λ‘ λμ€μ½λ μ°Έμ¬μκ°λ μ νκΈ° 2) νμ΅μμ€λ₯Ό ν΅μΌνκΈ° λ₯Ό μ€νν΄λ³΄κΈ°λ‘ νμ΅λλ€. μ λλ©΄ μ’κ² λ€μ.
λ€μ νμ΅ κ³ν
javascript κ°λ λΌκΈ°. backbone js νμ΅κ°λ₯ν μμ€μΌλ‘.
Last updated
Was this helpful?