Javascript Data Typeμ μμμΌ νλ μ΄μ
νλ‘ νΈμλμμ λΆλ³μ±μ΄λΌλ λ§μ΄ λμ¬ λ ν·κ°λ¦°λ€λ©΄?
볡μ¬ν κ°μ²΄μ μμ±μ λ³κ²½νλλ° μλ³Έ κ°μ²΄λ λ³κ²½λκ±Έ λ³Έμ μ΄ μλ€λ©΄?
μ΄ λ¬Έμλ₯Ό λ³΄κ³ λλ©΄
μλ°μ€ν¬λ¦½νΈμμ λ°μ΄ν° νμ
μ΄ νμν μ΄μ λ₯Ό μ μ μλ€.
κΈ°λ³Έν νμ
κ³Ό μ°Έμ‘°ν νμ
μ΄ μλ‘ λ€λ₯΄κ² λμνλ μ΄μ λ₯Ό μ΄ν΄ν μ μλ€.
κ°μ²΄μ λΆλ³μ±μ 보μ₯νλ©΄μ λ³κ²½μ κ°νκ±°λ 볡μ¬ν μ μλ€.
Javascript Data Type
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ λ°μ΄ν° νμ
μ κ°μ΅λλ€. ν¬κ² 2κ°μ§λ‘ κΈ°λ³Έν(Primitive Type)κ³Ό μ°Έμ‘°ν(Reference Type)μ΄ μμ΅λλ€.
μμ²λΌ κΈ°λ³Ένκ³Ό μ°Έμ‘°νμΌλ‘ ꡬλΆνλ μ΄μ λ 무μμΌκΉμ? ꡬλΆνλ€λ κ²μ κ·Όλ³Έμ μΌλ‘ λ€λ₯Έμ μ΄ μκΈ° λλ¬Έμ
λλ€.
Primitive Type(μμ κ°)
μμ κ°μ λ³κ²½ λΆκ°λ₯ν κ°μ
λλ€. μ¦, νλ² μμ±λ μμ κ°μ μ½κΈ° μ μ©μΈ κ°μΌλ‘μ¨ λ³κ²½ν μ μμ΅λλ€. κ·Έλμ μμκ°μ λΆλ³μ±(immutability)λ₯Ό κ°μ§λλ€. μ¬μ€ μ΄ λΆλΆμ΄ μ΄ν΄νκΈ° μ΄λ €μΈ μ μλλ°μ. μλ₯Ό λ€μ΄ μλμ κ°μ΄ λ³μμ μλ‘μ΄ κ°μ ν λΉνλ©΄ ageλ μ μμ μΌλ‘ 20μΌλ‘ κ°μ΄ μ λ³κ²½μ΄ λ©λλ€. κ·Έλ λ€λ©΄ 무μμ΄ λΆλ³μ±(immutability)λ₯Ό κ°μ§λ€λ κ²μΌκΉμ?
var age = 30
age = 20
JavaScript
볡μ¬
λ¨Όμ λ³μμ κ°μ ꡬλΆν΄μ μκ°ν΄μΌνλλ°μ. λ³μλ νλμ κ°μ μ μ₯νκΈ° μν΄ ν보λΒ λ©λͺ¨λ¦¬ κ³΅κ° μ체 λλΒ λ©λͺ¨λ¦¬ 곡κ°μ μλ³νκΈ° μν΄ λΆμΈ μ΄λ¦μ΄κ³ ,Β κ°μ λ³μμ μ μ₯λ λ°μ΄ν°μ
λλ€. κ·Έλμ μμ κ°μ λΆλ³μ±μ κ°μ§λ€λΌλ λ§μ μμ κ° μ체λ₯Ό λ³κ²½ν μ μλ€λ κ²μ΄μ§, λ³μ κ°μ λ³κ²½ν μ μλ€λ κ²μ΄ μλλλ€. λ³μλ μΈμ λ μ§ μ¬ν λΉμ ν΅ν΄ λ³μ κ°μ λ³κ²½ν μ μμ΅λλ€. κ·ΈλμΒ λ³(ν μ μλ)μμΈ κ²μ
λλ€.
κ·Έλμ λ³μμ μλ‘μ΄ κ°μ ν λΉνλ©΄, μμκ°μ λ³κ²½ λΆκ°λ₯ νκΈ° λλ¬Έμ λ³μκ° μ°Έμ‘°νλ λ©λͺ¨λ¦¬ 곡κ°μ μ£Όμκ° λ³κ²½λ©λλ€. μ΄λ¬ν νΉμ±μΒ λΆλ³μ±(immutability)Β λΌκ³ ν©λλ€. λΆλ³μ±μ κ°λ μμ κ°μ ν λΉν λ³μλ μ¬ν λΉ μ΄μΈμλ λ³μ κ°μ λ³κ²½ν μ μλ λ°©λ²μ΄ μμ΅λλ€. λ§μ½ μ¬ν λΉμ νμ§ μκ³ λ³μ κ°μ λ³κ²½ν μ μλ€λ©΄ κ°μ λ³κ²½, μ¦ μν λ³κ²½μ μΆμ νκΈ° μ΄λ ΅κ² λ§λλλ€.
μν λ³κ²½μ μΆμ νλ κ²μ μ νμν κΉμ? μλμ κ°λ¨ν μμ λ₯Ό μ΄ν΄λ΄
μλ€.
var age = 30
var copy = age
console.log(age) // 30
console.log(copy) // 30
age = 20
console.log(age) // 20
console.log(copy) // ?
JavaScript
볡μ¬
age λ³μμ κ° 30μ ν λΉνκ³ , copy λ³μμ copy λ³μλ₯Ό ν λΉνμ΅λλ€.κ·Έ ν age λ³μμ μλ‘μ΄ μ«μ κ° 20μ μ¬ν λΉνλ©΄ copy λ³μμ κ°μ μ΄λ»κ² λ κΉμ? μ΄ μ§λ¬Έμ ν΅μ¬μ λ³μμ λ³μλ₯Ό ν λΉνμ λ 무μμ΄ μ΄λ»κ² μ λ¬λλκ°? μ
λλ€. λ³μμ μμ κ°μ κ°λ λ³μλ₯Ό ν λΉνλ©΄ ν λΉλ°λ λ³μ(copy)μλ ν λΉλλ λ³μ(age)μ μμ κ°μ΄ 볡μ¬λμ΄ μ λ¬λ©λλ€.
μ΄λ₯ΌΒ κ°μ μν μ λ¬Β μ΄λΌκ³ ν©λλ€. μ΄ λ age λ³μμ copy λ³μλ μ«μ κ° 30μ κ°λλ€λ μ μμλ λμΌν©λλ€. νμ§λ§ age λ³μμ copy λ³μμ κ° 30μ μλ‘ λ€λ₯Έ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λ λ³κ°μ κ°μ
λλ€.
κ²°κ΅ λ λ³μμ μμ κ°μ μλ‘ λ€λ₯Έ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λ λ³κ°μ κ°μ΄ λμ΄ μ΄λ νμͺ½μμ μ¬ν λΉμ ν΅ν΄ κ°μ λ³κ²½νλλΌλ μλ‘ κ°μν μ μμ΅λλ€. μ΄λ₯Ό λΆλ³μ±(immutable)ν μνλ₯Ό κ°μ§λ€κ³ νλ κ²μ
λλ€.
Reference Type
κ°μ²΄λ νλ‘νΌν°μ κ°μκ° μ ν΄μ Έ μμ§ μμΌλ©°, λμ μΌλ‘ μΆκ°λκ³ μμ λ μ μμ΅λλ€. λν νλ‘νΌν°μ κ°μλ μ μ½μ΄ μμ΅λλ€. λ°λΌμ κ°μ²΄λ μμ κ°κ³Ό κ°μ΄ ν보ν΄μΌν λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό μ¬μ μ μ ν μκ° μλλ°μ. κ°μ²΄λ 볡ν©μ μΈ μλ£κ΅¬μ‘°μ΄λ―λ‘ κ°μ²΄λ₯Ό κ΄λ¦¬νλ λ°©μμ΄ μμ κ°κ³Ό λΉκ΅ν΄μ λ³΄λ€ λ³΅μ‘ν©λλ€. κ·Έλμ ꡬν λ°©μλ λΈλΌμ°μ λ§λ€ λ€λ₯Έ κ²½μ°λ μμ΅λλ€. μμ κ°μ μλμ μΌλ‘ μ μ λ©λͺ¨λ¦¬λ₯Ό μλΉνμ§λ§ κ°μ²΄λ κ²½μ°μ λ°λΌ ν¬κΈ°κ° λ§€μ° ν΄ μλ μμ΅λλ€. κ·Έλμ κ°μ²΄λ₯Ό μμ±νκ³ νλ‘νΌν°μ μ κ·Όνλ κ²λ μμ κ°κ³Ό λΉκ΅ν λ λΉμ©μ΄ λ§μ΄ λλ μΌμ
λλ€. κ·Έλμ κ°μ²΄λ μμ κ°κ³Ό λ€λ₯Έ λ°©μμΌλ‘ λμν©λλ€
κ°μ²΄(μ°Έμ‘°) νμ
μ μμκ°κ³Ό λ€λ₯΄κ²Β λ³κ²½ κ°λ₯ν κ°(mutable value)Β μ
λλ€. λ¨Όμ λ³μμ κ°μ²΄λ₯Ό ν λΉνλ©΄ μ΄λ€ μΌμ΄ λ°μν κΉμ?
var user = {
name: 'Jun'
}
JavaScript
볡μ¬
μμ κ°μ΄ μ μΈνμ λ μμ κ°μ ν λΉν λ³μλ μμ κ° μ체λ₯Ό κ°μΌλ‘ κ°μ΅λλ€. νμ§λ§ κ°μ²΄λ₯Ό ν λΉν λ³μλ λμ μΌλ‘ λ³ν μ μλ λ©λͺ¨λ¦¬ 곡κ°μ μλ λ°μ΄ν°μ μ£Όμλ₯Ό κ°λ¦¬ν€λ μ°Έμ‘°κ°μ κ°μ΅λλ€. μ¬κΈ°μ μ°Έμ‘° κ°μ μμ±λ κ°μ²΄κ° μ μ₯λ λ©λͺ¨λ¦¬ 곡κ°μ μ£Όμ, κ·Έ μ체μ
λλ€. κ·Έλμ κ°μ²΄λ₯Ό ν λΉν λ³μλ₯Ό μ°Έμ‘°νλ©΄ λ©λͺ¨λ¦¬μ μ μ₯λμ΄ μλ μ°Έμ‘° κ°μ ν΅ν΄ μ€μ κ°μ²΄μ μ κ·Όν©λλ€.
μ΄λ¬ν μ λλ¬Έμ μμ μ μμ΄μλ μμκ°κ³Όλ λ€λ₯Έ νΉμ§μ κ°λλ°μ. μμ κ°μ λ³κ²½ λΆκ°λ₯ν κ°μ΄λ―λ‘ μμ κ°μ κ°λ λ³μμ κ°μ λ³κ²½νλ €λ©΄ μ¬ν λΉμ ν΅ν΄ λ©λͺ¨λ¦¬μ μμ κ°μ μλ‘κ² μμ±ν΄μΌ ν©λλ€. νμ§λ§ κ°μ²΄λ λ³κ²½ κ°λ₯ν κ°μ΄λ―λ‘ λ©λͺ¨λ¦¬μ μ μ₯λ κ°μ²΄λ₯Ό μ§μ μμ ν μ μμ΅λλ€. μ΄λ κ°μ²΄λ₯Ό ν λΉν λ³μμ μ¬ν λΉμ νμ§ μμμΌλ―λ‘ κ°μ²΄λ₯Ό ν λΉν λ³μμ μ°Έμ‘° κ°μ λ³κ²½λμ§ μμ΅λλ€.
κ°μ²΄λ μμκ°μ λΉν΄ μμ±νκ³ κ΄λ¦¬νλ λ°©μμ΄ λ³΅μ‘νκ³ λΉμ©μ΄ λ§μ΄ λλλ€. μμ κ°μ²λΌ ν¬κΈ°κ° μΌμ νμ§λ μκ³ , νλ‘νΌν° κ°μ΄ κ°μ²΄μΌμλ μμ΄μ 볡μ¬ν΄μ μμ±νλ λΉμ©μ΄ λ§μ΄λλλ€. μ¦ λ©λͺ¨λ¦¬μ ν¨μ¨μ μ¬μ©μ΄ μ΄λ ΅κ³ μ±λ₯μ΄ λλΉ μ§μκ° μλλ°μ. λ°λΌμ λ©λͺ¨λ¦¬μ ν¨μ¨μ μ¬μ©μ μν΄ κ°μ²΄λ₯Ό 볡μ¬ν΄ μμ±νλ λΉμ©μ μ μ½νκ³ , μ±λ₯μ ν₯μμν€κΈ° μν΄ κ°μ²΄λ λ³κ²½ κ°λ₯ν κ°μΌλ‘ μ€κ³λμ΄ μμ΅λλ€. λ©λͺ¨λ¦¬ μ¬μ©μ ν¨μ¨μ±κ³Ό μ±λ₯μ μν΄ μ΄λ μ λμ ꡬ쑰μ μΈ λ¨μ μ κ°μν μ€κ³μΈ κ²μ΄μ£ .
μ΄λ¬ν κ΅¬μ‘°λ‘ μΈν΄ νκ°μ§ λ¨μ μ΄ μμ μ μλλ°μ. κ·Έκ²μ μμ κ°κ³Όλ λ€λ₯΄κ² μ¬λ¬ κ°μ μλ³μκ° νλμ κ°μ²΄λ₯Ό 곡μ ν μ μλ€λ κ²μ
λλ€.
var user = {
name: 'Jun'
}
var copy = person
JavaScript
볡μ¬
κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ³μ(μλ³Έ, user)λ₯Ό λ€λ₯Έ λ³μ(μ¬λ³Έ, copy)μ ν λΉνλ©΄ μλ³Έμ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ μ λ¬λ©λλ€. μ΄λ₯ΌΒ μ°Έμ‘°μ μν μ λ¬μ΄λΌκ³ ν©λλ€. λ κ°μ μλ³μλ νλμ κ°μ²΄λ₯Ό 곡μ ν©λλ€. λ°λΌμ μλ³Έ λλ μ¬λ³Έ μ€ μ΄λ νμͺ½μμ κ°μ²΄λ₯Ό λ³κ²½νλ©΄ μλ‘ μν₯μ μ£Όκ³ λ°κ² λ©λλ€.
κ²°κ΅ κ°μ μν μ λ¬κ³Ό μ°Έμ‘°μ μν μ λ¬μ μλ³μκ° κΈ°μ΅νλ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λμ΄ μλ κ°μ 볡μ¬ν΄μ μ λ¬νλ€λ λ©΄μμ λμΌν©λλ€. λ€λ§ μλ³μκ° κΈ°μ΅νλ λ©λͺ¨λ¦¬ 곡κ°, μ¦ λ³μμ μ μ₯λμ΄ μλ κ°μ΄ μμ κ°μ΄λ μ°Έμ‘° κ°μ΄λμ μ°¨μ΄λ§ μμ λΏμ
λλ€.
μ 리
β’
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ μλ μ΄μ λ‘ μΈν΄ λ°μ΄ν° νμ
μ΄ νμνλ€
β¦
κ°μ μ μ₯ν λ ν보ν΄μΌ νλΒ λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό κ²°μ νκΈ° μν΄
β¦
κ°μ μ°Έμ‘°ν λ ν λ²μ μ½μ΄ λ€μ¬μΌ ν Β λ©λͺ¨λ¦¬ 곡κ°μ ν¬κΈ°λ₯Ό κ²°μ νκΈ° μν΄
β¦
λ©λͺ¨λ¦¬μμ μ½μ΄ λ€μΈΒ 2μ§μλ₯Ό μ΄λ»κ² ν΄μν μ§ κ²°μ νκΈ° μν΄
β’
μλ°μ€ν¬λ¦½νΈμ λ³μλ μ μΈμ΄ μλ ν λΉμ μν΄ νμ
μ΄ κ²°μ λλ€. κ·Έλ¦¬κ³ μ¬ν λΉμ μν΄ λ³μμ νμ
μ μΈμ λ μ§ λμ μΌλ‘ λ³ν μ μλ€.
β’
μμκ°μ λ³κ²½ λΆκ°λ₯ν κ°(immutable value)μ΄λ€. λ°λ©΄ κ°μ²΄(μ°Έμ‘°ν)μ κ°μ λ³κ²½ κ°λ₯ν κ°(mutable)μ
λλ€.
β’
μμ κ°μ λ³μμ ν λΉνλ©΄ λ³μ(ν보λ λ©λͺ¨λ¦¬ 곡κ°)μλ μ€μ κ°μ΄ μ μ₯λλ€. μ΄μ λΉν΄ κ°μ²΄λ₯Ό ν λΉνλ©΄ λ³μ(ν보λ λ©λͺ¨λ¦¬ 곡κ°)μλ μ°Έμ‘° κ°μ΄ μ μ₯λλ€.
β’
μμ κ°μ κ°λ λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ©΄ μλ³Έμ μμ κ°μ΄ 볡μ¬λμ΄ μ λ¬λλ€. μ΄λ₯Ό κ°μ μν μ λ¬(pass by value)λΌκ³ νλ€. μ΄μ λΉν΄ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ³μλ₯Ό λ€λ₯Έ λ³μμ ν λΉνλ©΄ μλ³Έμ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ μ λ¬λλ€. μ΄λ₯Ό μ°Έμ‘°μ μν μ λ¬(pass by refrence)λΌκ³ ν©λλ€.