λ°μ΄ν° νμ
μ κ°μ μ’
λ₯.
ES6μ 7κ°μ λ°μ΄ν° νμ
μ μ 곡νλ€.
- μμ νμ
(primitive type)
- number
- string
- boolean
- undefined
- null
- symbol: ES6μμ λμ
- κ°μ²΄ νμ (object/reference type)
μλ°μ€ν¬λ¦½νΈ μμ§μ νμ μ ꡬλ³ν΄μ κ°μ μ·¨κΈνλ€.
6.1 μ«μ νμ
μλ°μ€ν¬λ¦½νΈλ μ μμ μ€μλ₯Ό ꡬλΆνμ§ μκ³ νλμ μ«μ νμ λ§ μ‘΄μ¬νλ€.
ECMAScript μ¬μμ λ°λ₯΄λ©΄, μ«μ νμ
μ κ°μ λ°°μ λ°λ 64λΉνΈ λΆλμμμ νμμ λ°λ₯Έλ€.
μ¦, λͺ¨λ μλ₯Ό μ€μλ‘ μ²λ¦¬νκ³ integer typeμ΄ λ³λλ‘ μ‘΄μ¬νμ§ μλλ€.
μλ°μ€ν¬λ¦½νΈλ 2μ§μ, 8μ§μ, 16μ§μλ₯Ό νννκΈ° μν λ°μ΄ν° νμ μ μ 곡νμ§ μκΈ° λλ¬Έμ μ΄λ€ κ°μ μ°Έμ‘°νλ©΄ λͺ¨λ 10μ§μλ‘ ν΄μλλ€.
var binary = 0b01000001;
var hex = 0x41;
console.log(binary); // 65
console.log(binary === hex); // true
javascriptμ μ«μ νμ ꡬλ³: μ λμ¬
0b, 0Bλ‘ μμνλ©΄ 2μ§μ / 0o, 0Oλ‘ μμνλ©΄ 8μ§μ / 0x, 0Xλ‘ μμνλ©΄ 16μ§μ, μ λμ¬κ° μλ μ«μλ©΄ 10μ§μ.
μ«μ νμ μ μΆκ°μ μΌλ‘ μΈ κ°μ§ κ°λ ννν μ μλ€.
- Infinity: μμ 무νλ
- -Infinity: μμ 무νλ
- NaN: μ°μ μ°μ° λΆκ°(not-a-number)
- μλ°μ€ν¬λ¦½νΈλ λμλ¬Έμλ₯Ό ꡬλ³(case-sensitive)νλ―λ‘ NAN, Nan, nan κ°μ΄ νννμ§ μλλ‘ μ£Όμνμ.
6.2 λ¬Έμμ΄ νμ
λ¬Έμμ΄ νμ
μ ν
μ€νΈ λ°μ΄ν°λ₯Ό λνλ΄λ λ° μ¬μ©νλ€.
UTF-16(0κ° μ΄μμ 16λΉνΈ μ λμ½λ λ¬Έμ)μ μ§ν©μΌλ‘ μ μΈκ³ λλΆλΆμ λ¬Έμλ₯Ό ννν μ μλ€.
μμλ°μ΄ν, ν°λ°μ΄ν, λ°±ν±μΌλ‘ ν
μ€νΈλ₯Ό κ°μ μ μλλ°, μΌλ°μ μΌλ‘ μμλ°μ΄νλ₯Ό μ¬μ©νλ€.
var string;
string = 'μμλ°μ΄νλ‘ κ°μΌ λ¬Έμμ΄ λ΄μ "ν°λ°μ΄ν"λ λ¬Έμμ΄λ‘ μΈμλλ€.';
string = "ν°λ°μ΄νλ‘ κ°μΌ λ¬Έμμ΄ λ΄μ 'μμλ°μ΄ν'λ λ¬Έμμ΄λ‘ μΈμλλ€.";
string = "κ°μ λ°μ΄νλ₯Ό μ¬μ©νλ€λ©΄ 'μ΄μ€μΌμ΄ν'λ₯Ό ν¬ν¨ν΄μΌ νλ€.";
λ¬Έμμ΄μ λ°μ΄νλ‘ κ°μΈλ μ΄μ λ ν€μλλ μλ³μ κ°μ ν ν°κ³Ό ꡬλΆνκΈ° μν΄μλ€.
μλ°μ€ν¬λ¦½νΈμ λ¬Έμμ΄μ μμ νμ
μ΄λ©°, λ³κ²½ λΆκ°λ₯ν κ°(immutable value)μ΄λ€.
λ¬Έμμ΄μ΄ μμ±λλ€λ©΄ κ·Έ λ¬Έμμ΄μ λ³κ²½ν μ μλ€.
6.3 ν νλ¦Ώ 리ν°λ΄ (template literal)
- ES6λΆν° ν νλ¦Ώ 리ν°λ΄μ΄λΌκ³ νλ μλ‘μ΄ λ¬Έμμ΄ νκΈ°λ²μ΄ λμ λμλ€.
- λ©ν°λΌμΈ λ¬Έμμ΄, ννμ μ½μ , νκ·Έλ ν νλ¦Ώ λ± νΈλ¦¬ν λ¬Έμμ΄ μ²λ¦¬ κΈ°λ₯μ μ 곡νλ€.
- λ°±ν±μ μ¬μ©ν΄ νννλ€.
6.3.1 λ©ν°λΌμΈ λ¬Έμμ΄ (multi-line string)
μΌλ° λ¬Έμμ΄μμ μ€λ°κΏ λ±μ 곡백(white space)λ₯Ό νννλ €λ©΄ λ°±μ¬λμ()λ‘ μμνλ μ΄μ€μΌμ΄ν μνμ€(escape sequence)λ₯Ό μ¬μ©ν΄μΌ νλ€.
ν νλ¦Ώ 리ν°λ΄ λ΄μμλ λͺ¨λ 곡백λ μλ κ·Έλλ‘ νμ©λλ€.
const multiLineString = `μ΄ λ¬Έμμ΄μ
μ¬λ¬ μ€λ‘
μμ±λ μ μμ΅λλ€.`;
6.3.2 ννμ μ½μ (expression interpolation)
- ννμμ μ½μ νλ €λ©΄ ${}μΌλ‘ ννμμ κ°μΌλ€.
- ννμμ νκ³Ό κ²°κ³Όκ° λ¬Έμμ΄μ΄ μλλλΌλ λ¬Έμμ΄λ‘ κ°μ λ‘ λ³νλμ΄ μ½μ λλ€.
var first = "Yaesol";
var last = "Choi";
console.log(`My name is ${first} ${lsast}.`);
ννμ μ½μ
μ λ°λμ ν
νλ¦Ώ 리ν°λ΄ λ΄μμ μ¬μ©ν΄μΌ νλ€.
μΌλ° λ¬Έμμ΄μμ ννμ μ½μ
μ λ¬Έμμ΄μΌ λΏμ΄λ€.
6.4 λΆλ¦¬μΈ νμ
6.5 undefined νμ
var ν€μλλ‘ μ μΈν λ³μλ μ묡μ μΌλ‘ undefinedλ‘ μ΄κΈ°νλλ€.
cμΈμ΄λ λ©λͺ¨λ¦¬ 곡κ°μ μ μΈλ§ νλ©΄ μ°λ κΈ° κ°(garbage value)κ° λ€μ΄μλ λ°λ©΄, μλ°μ€ν¬λ¦½νΈ μμ§μ undefinedλ‘ μ΄κΈ°ννλ€.
undefinedλ κ°λ°μκ° μλμ μΌλ‘ ν λΉνκΈ° μν κ°μ΄ μλλΌ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ λ³μλ₯Ό μ΄κΈ°νν λ μ¬μ©νλ κ°μ΄λ€.
κ°λ°μκ° undefinedλ₯Ό λ³μμ ν λΉνλ©΄ λ³Έλ μ·¨μ§μ μ΄κΈλκ³ νΌλμ μ€ μ μμΌλ―λ‘ κΆμ₯νμ§ μλλ€.
λ³μμ κ°μ΄ μλ€λ κ²μ λͺ μνκ³ μΆμ λλ undefinedκ° μλλΌ nullμ ν λΉνλ€.
μ μΈ(declaration)κ³Ό μ μ(definition):
undefined: μ μλμ§ μμ. -> μ¬κΈ°μμ 'μ μ'λ λ³μμ κ°μ ν λΉνμ¬ λ³μμ μ€μ²΄λ₯Ό λͺ νν νλ κ².
μλ°μ€ν¬λ¦½νΈμμλ μ μΈ μ μ묡μ μΌλ‘ μ μκ° μ΄λ€μ§κΈ° λλ¬Έμ μ μΈκ³Ό μ μμ ꡬλΆμ΄ λͺ¨νΈνλ€.
6.6 null νμ
νλ‘κ·Έλλ° μΈμ΄μμ nullμ λ³μμ κ°μ΄ μλ€λ κ²μ μλμ μΌλ‘ λͺ
μ(μλμ λΆμ¬, intentional absence)ν λ μ¬μ©νλ€.
nullμ ν λΉνλ κ²μ λ³μκ° μ΄μ μ μ°Έμ‘°νλ κ°μ λ μ΄μ μ°Έμ‘°νμ§ μκ² λ€λ μλ―Έλ€. -> κ°λΉμ§ μ½λ μ
μν
ν¨μκ° μ ν¨ν κ°μ λ°νν μ μλ κ²½μ° λͺ μμ μΌλ‘ nullμ λ°ννκΈ°λ νλ€.
6.7 μ¬λ² νμ
μ¬λ²(symbol): ES6μμ μΆκ°λ 7λ²μ§Έ νμ
, λ³κ²½ λΆκ°λ₯ν μμ νμ
μ κ°
μ¬λ² κ°μ λ€λ₯Έ κ°κ³Ό μ€λ³΅λμ§ μλ μ μΌλ¬΄μ΄ν κ°.
μ΄λ¦μ΄ μΆ©λν μνμ΄ μλ κ°μ²΄μ μ μΌν νλ‘νΌν° ν€λ₯Ό λ§λ€κΈ° μν΄ μ¬μ©ν¨.
μ¬λ² μ΄μΈμ μμ κ°μ 리ν°λ΄μ ν΅ν΄ μμ±νμ§λ§ μ¬λ²μ Symbol ν¨μλ₯Ό νΈμΆν΄ μμ±ν¨. μμ±λ μ¬λ²κ°μ μΈλΆμ λ ΈμΆλμ§ μμΌλ©°, λ€λ₯Έ κ°κ³Ό μ λ μ€λ³΅λμ§ μλ μ μΌλ¬΄μ΄ν κ°.
var key = Symbol("key");
obj[key] = "value";
console.log(obj[key]); // value
6.8 κ°μ²΄ νμ
μμ νμ κ³Ό κ°μ²΄ νμ μ κ·Όλ³Έμ μΌλ‘ λ€λ₯΄λ€. -> 11μ₯μμ κ³μ.
μ€μν κ²μ, μλ°μ€ν¬λ¦½νΈλ κ°μ²΄ κΈ°λ°μ μΈμ΄, μλ°μ€ν¬λ¦½νΈλ₯Ό μ΄λ£¨κ³ μλ κ±°μ λͺ¨λ κ²μ΄ κ°μ²΄
6.9 λ°μ΄ν° νμ μ νμμ±
6.9.1 λ°μ΄ν° νμ μ μν λ©λͺ¨λ¦¬ 곡κ°μ ν보μ μ°Έμ‘°
λ©λͺ¨λ¦¬μ κ°μ μ μ₯νλ €λ©΄ λ¨Όμ ν보ν΄μΌ ν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό κ²°μ ν΄μΌ νλ€.
λ³μμ ν λΉλλ κ°μ λ°μ΄ν° νμ μ λ°λΌ ν보ν΄μΌ ν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°κ° κ²°μ λλ€.
λ°μ΄ν° νμ μ λ°λΌ ν보λλ λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°:
ECMAScript - numberλ 64λΉνΈ(8λ°μ΄νΈ), stringμ κ° λ¬Έμκ° 2λ°μ΄νΈλ₯Ό μ°¨μ§νλ€κ³ λͺ μλμ΄μμΌλ μ΄μΈμ νμ μ λͺ μμ μΌλ‘ κ·μ x.
μλ°μ€ν¬λ¦½νΈ μμ§ μ μ‘°μ¬μ ꡬνμ λ°λΌ λ€λ₯΄λ€.
μ¬λ² ν μ΄λΈ: μ»΄νμΌλ¬ λλ μΈν°ν리ν°λ μ¬λ² ν μ΄λΈμ΄λΌκ³ λΆλ₯΄λ μλ£ κ΅¬μ‘°λ₯Ό ν΅ν΄ μλ³μλ₯Ό ν€λ‘ λ°μΈλ©λ κ°μ λ©λͺ¨λ¦¬ μ£Όμ, λ°μ΄ν° νμ , μ€μ½ν λ±μ κ΄λ¦¬νλ€.
6.9.2 λ°μ΄ν° νμ μ μν κ°μ ν΄μ
λͺ¨λ κ°μ λ°μ΄ν° νμ μ κ°μ§λ©°, λ©λͺ¨λ¦¬μ 2μ§μ, μ¦ λΉνΈμ λμ΄λ‘ μ μ₯λλ€. μ«μ νμ - λ©λͺ¨λ¦¬ 곡κ°μ μ£Όμμμ μ½μ΄ λ€μΈ 2μ§μλ₯Ό μ«μλ‘ ν΄μνλ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ λ°μ΄ν° νμ ꡬλΆ
μλ°μ€ν¬λ¦½νΈ μμ§μ κ°κ³Ό ν¨κ» ν΄λΉ κ°μ νμ μ 보λ₯Ό μ°Έμ‘°νμ¬ λ°μ΄ν° νμ μ ꡬλΆνλ€.
- μμ νμ μ κ°μ μ μ₯ νμκ³Ό ν¬κΈ°μ λ°λΌ νμ μ΄ κ²°μ λλ€. μλ₯Ό λ€μ΄, `IEEE 754`(64λΉνΈ λΆλ μμμ νμ)μΌλ‘ μ μ₯λ κ°μ `number` νμ μ΄λ©°, `UTF-16`μΌλ‘ μ μ₯λ κ° λ¬Έμκ° 2λ°μ΄νΈ(16λΉνΈ)λ‘ κ΅¬μ±λ κ°μ `string` νμ μ΄λ€.
- μ°Έμ‘° νμ μ κ°μ²΄ λ±κ³Ό κ°μ μ°Έμ‘°ν λ°μ΄ν°λ₯Ό λ§νλ©°, μλ°μ€ν¬λ¦½νΈ μμ§μ λ°λΌ ꡬ체μ μΈ μ²λ¦¬ λ°©μμ΄ λ¬λΌμ§λ€. (μμΈν λ΄μ©μ 11μ₯μμ λ€λ£Έ)
- νκ·Έ λΉνΈ(tag bits)λ κ°μ νμ μ λΉ λ₯΄κ² ꡬλΆνκΈ° μν΄, λ°μ΄ν°μ μμ λΉνΈ μ λ³΄κ° ν¨κ» μ μ₯λλ λ°©μμ΄λ€. μλ₯Ό λ€μ΄, μΌλΆ μλ°μ€ν¬λ¦½νΈ μμ§(V8 μμ§)μ νλ ν΄λμ€(hidden classes)λΌλ λ΄λΆ ꡬ쑰λ₯Ό μ¬μ©ν΄ κ°μ²΄μ νμ κ³Ό ꡬ쑰λ₯Ό μ΅μ ννλ€.
6.10 λμ νμ΄ν
6.10.1 λμ νμ μΈμ΄μ μ μ νμ μΈμ΄
μ μ νμ
(static/strong type) μΈμ΄ like C, Java
λ λ³μλ₯Ό μ μΈν λ λ°μ΄ν° νμ
μ μ¬μ μ μ μΈνλ€. : λͺ
μμ νμ
μ μΈ(explicit type declaration)
- λ³μμ νμ λ³κ²½ λΆκ°. μ»΄νμΌ μμ μ νμ 체ν¬νκ³ , ν΅κ³Ό μ μλ¬ μ²λ¦¬νκ³ νλ‘κ·Έλ¨ μ€ν λ§μ.
μλ°μ€ν¬λ¦½νΈλ λμ νμ (dynamic/weak type) μΈμ΄
- λ³μ μ μΈ μ νμ μ μΈ x. var, let, const ν€μλ λΏ.
- λ³μλ μ μΈμ΄ μλ ν λΉμ μν΄ νμ μ΄ κ²°μ λ¨. (νμ μΆλ‘ , type inference)
- μ¬ν λΉμ μν΄ λ³μμ νμ μ μΈμ λ μ§ λμ μΌλ‘ λ³ν μ μλ°. : λμ νμ΄ν(dynamic typing)
6.10.2 λμ νμ μΈμ΄μ λ³μ
μ₯μ : μμ λ‘λ€. νΈλ¦¬νλ€.
λ¨μ : μννλ€. λ³ννλ λ³μ κ°μ μΆμ νκΈ° μ΄λ €μ. κ°μ νμΈνκΈ° μ μ νμ μ νμ ν μ μλ€. λ, μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ μ묡μ μΌλ‘ νμ μ΄ λ³νλκΈ°λ νλ€. κ²°κ΅ μ μ°μ±(felxibility)λ λμ§λ§ μ λ’°μ±(reliability)λ λ¨μ΄μ§λ€.
- μ£Όμμ¬ν
- λ³μλ νμν λ§νΌλ§ μ¬μ©.
- λ³μμ μ ν¨ λ²μ(μ€μ½ν)λ μ΅λν μ’κ².
- μ μ λ³μ μ¬μ©μ μ΅μν.
- λ³μ보λ€λ μμ μ¬μ©νμ¬ κ°μ λ³κ²½ μ΅μ
- λͺ©μ κ³Ό μλ―Έκ° λλ¬λλ λ€μ΄λ°
π μ§λ¬Έ: λ³μμ κ°μ΄ μλ€λ κ²μ λͺ μνκ³ μΆμ λ undefinedλ₯Ό μ°λ©΄ μ λλ μ΄μ κ° λκΉμ?
γλͺ¨λμλ°μ€ν¬λ¦½νΈ Deep Diveγ λ₯Ό 곡λΆνλ©° μ 리ν κΈ°λ‘μ λλ€.