[JS νλ‘ν νμ ] μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ νμ΄λ³΄κΈ°
μ΄λ² ν¬μ€ν
μμλ μλ°μ€ν¬λ¦½νΈ(JavaScript)νλ©΄ λΉ μ§ μ μλ νλ‘ν νμ
(Prototype)
μ λν΄μ νλ² μ΄μΌκΈ°ν΄λ³΄λ €κ³ νλ€.
νλ‘ν νμ μ μλ°μ€ν¬λ¦½νΈλ₯Ό ES5 μμ λΆν° μ¬μ©ν΄μ€λ λΆλ€μκ²λ λ§€μ° μ΅μνμ§λ§ ES6λΆν° μμνμ λΆλ€μ λλΆλΆ ν΄λμ€λ₯Ό μ¬μ©νκΈ° λλ¬Έμ μ΅μν κ°λ μ μλ κ²μ΄λΌκ³ μκ°νλ€.
νμκ° μ²μ νλ‘ νΈμλ κ°λ°μ μμνμλλ μλ°μ€ν¬λ¦½νΈμ ES5
λ²μ μμ λ§ ES6
λ‘ λμ΄κ°κ³ μλ μμ μ΄μλλ°, κΈ°μ‘΄μλ μλ°(Java)λ₯Ό μ£Όλ‘ μ¬μ©νκ³ μλ νμκ° νλ‘ νΈμλ κ°λ°λ‘ λμ΄μ€λ©΄μ μ μΌ μ λ¨Ήμλ λΆλΆμ΄ λ°λ‘ μ΄ νλ‘ν νμ
μ΄μλ€.(λ¬Όλ‘ μ λ¨Ήλ 건 νμ¬μ§ννμ΄λ€)
λ¬Όλ‘ μ§κΈμ μλ°μ€ν¬λ¦½νΈμ μμμ΄ λ§μ΄ μ¬λΌκ°λ©΄μ νλ‘ν νμ ν¨ν΄μ λν κ΄μ¬λ λ§μμ§κΈ° μμνμ§λ§, κ·Έλλ λΉμλ μ§κΈμ΄λ μ¬μ ν μ£Όλ₯λ C κ³μ΄ μΈμ΄λ Javaμμ μ¬μ©νλ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ν κ°μ²΄ μμ± λ°©μμ΄λ€.
κ·Έλμ μλ°μ€ν¬λ¦½νΈλ₯Ό μ²μ μ νλ κ°λ°μμκ² νλ‘ν νμ
κΈ°λ° νλ‘κ·Έλλ°μ μλμ μΌλ‘ λ―μ λ°©μμΌ μ λ°μ μκ³ , μ΄λ‘ μΈν΄ κΈ°μ‘΄ κ°λ°μλ€μ΄ μλ°μ€ν¬λ¦½νΈλ‘ μ§μ
νλλ° μ΄λ €μμ΄ μμλ€. κ·Έλ° μ΄μ λ‘ ES6μμλ class
μμ½μ΄κ° λ±μ₯ν κ²μ΄λ€.
μ¬μ€ νμλ μμ§ ν΄λμ€ κΈ°λ°μ κ°μ²΄ μμ± λ°©μμ΄ μ΅μνκΈ° λλ¬Έμ νλ‘ν νμ μ λν 곡λΆκ° λ νμνλ€.
κ·Έλμ μ΄λ² ν¬μ€ν μμλ νλ‘ν νμ ν¨ν΄μ΄ 무μμΈμ§, μλ°μ€ν¬λ¦½νΈ λ΄μμ νλ‘ν νμ μ΄ μ΄λ€ λ°©μμΌλ‘ μ¬μ©λκ³ μλμ§μ μ§μ€ν΄μ νλ² μ΄μΌκΈ°ν΄λ³΄λ €κ³ νλ€.
ES6λΆν° ν΄λμ€λ₯Ό μ§μνλλ°λ νλ‘ν νμ μ κ΅³μ΄ μμμΌ νλμ?
μλ°μ€ν¬λ¦½νΈλ ES6λΆν° class
ν€μλλ₯Ό μ¬μ©νμ¬ ν΄λμ€λ₯Ό μ§μνκ³ μλ€. μ νν λ§νλ©΄ νλ‘ν νμ
μΌλ‘ ν΄λμ€λ₯Ό νλ΄λ΄μ ꡬνν κ²μ΄λΌκ³ λ§νλ κ²μ΄ λ§λ€.
κ·Έλ° μ΄μ λ‘ λ§μ κ°λ°μλ€μ΄ μλ°μ€ν¬λ¦½νΈμ ν΄λμ€λ₯Ό λ¨μν λ¬Έλ² μ€ν(Syntactic Sugar)
λΌκ³ μ΄μΌκΈ°νμ§λ§, μ¬μ€ κ°μΈμ μΌλ‘ μλ°μ€ν¬λ¦½νΈμ ν΄λμ€λ ES5 μμ νλ‘ν νμ
μ μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²λ³΄λ€ λ μ격ν μ μ½μ κ°μ§κ³ μκΈ° λλ¬Έμ λ¨μν λ¬Έλ² μ€νμ΄λΌκΈ°λ³΄λ€λ μμ μμ(Superset)
λΌκ³ νλκ² λ§μ§ μλ μΆλ€.
κ·Έλ¬λ©΄ κ·Έλ₯ ν΄λμ€λ₯Ό μ°λ©΄ λλλ° μ νλ‘ν νμ μ μμμΌ νλ κ²μΌκΉ?
κ·Έ μ΄μ λ ES6μμ class
ν€μλλ₯Ό ν΅ν΄ ν΄λμ€λ₯Ό μ§μνκ³ μκΈ°λ νμ§λ§, μ΄κ±΄ μλ°μ€ν¬λ¦½νΈκ° ν΄λμ€ κΈ°λ° μΈμ΄κ° λμλ€λ μλ―Έλ μλκΈ° λλ¬Έμ΄λ€. κ²°κ΅ μλ°μ€ν¬λ¦½νΈ μμμμ ν΄λμ€λ ν΄λμ€μ νμ μ΄ νλ‘ν νμ
μ΄λ€.
κ·Έλ¦¬κ³ μμ μ μμ±λ λ κ±°μ νλ‘ νΈμλ μ½λμ κ²½μ°μλ ES5λ‘ μμ±λ κ²λ λ§κΈ° λλ¬Έμ μμ§κΉμ§ νλ‘ νΈμλ κ°λ°μλ€μ ES5λ₯Ό λ§μ ΈμΌνλ κ²½μ°κ° μμ μλ κ²μ΄ νμ€μ΄λ€. λ¬Όλ‘ ES5λ₯Ό ES6 μ΄μμ λ²μ μΌλ‘ λ§μ΄κ·Έλ μ΄μ νλ €κ³ ν΄λ κΈ°μ‘΄μ νλ‘ν νμ κΈ°λ°μ κ°μ²΄ μμ±μ΄λ μμμ΄ κ΅¬νλ μ½λλ₯Ό μ΄ν΄ν μ μλ€λ©΄ λ§μ΄κ·Έλ μ΄μ λν λΆκ°λ₯νλ€.
νλ‘ν νμ μ λμμΈ ν¨ν΄μ΄λ€
νλ‘ν νμ
μ΄λΌκ³ νλ©΄ μΌλ°μ μΌλ‘ μλ°μ€ν¬λ¦½νΈλ₯Ό λ μ¬λ¦¬μ§λ§, μ¬μ€ νλ‘ν νμ
μ μλ°μ€ν¬λ¦½νΈμμλ§ μ¬μ©λλ κ²μ μλκ³ , κ·Έλ₯ μΌμ’
μ λμμΈ ν¨ν΄ μ€ νλμ΄λ€. μλ°μ€ν¬λ¦½νΈ λΏλ§ μλλΌ ActionScript
, Lua
, Perl
λ± νλ‘ν νμ
κΈ°λ° νλ‘κ·Έλλ°μ μ§μνλ λ€λ₯Έ μΈμ΄λ λ§λ€.
κ·Έλμ μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ μ μμΈν μμ보기 μ μ λμμΈ ν¨ν΄μΌλ‘μ¨μ νλ‘ν νμ μ λ¨Όμ μμλ³ΌκΉ νλ€.
νλ‘ν νμ
ν¨ν΄μ κ°μ²΄λ₯Ό ν¨μ¨μ μΌλ‘ μμ±νλ λ°©λ²
μ λ€λ£¨λ ν¨ν΄ μ€ νλμΈλ°, μ£Όλ‘ κ°μ²΄λ₯Ό μμ±νλ λΉμ©μ΄ ν΄ λ μ΄λ₯Ό ννΌνκΈ° μν΄ μ¬μ©λλ€.
κ°μ²΄λ₯Ό μμ±ν λμ λΉμ©μ΄ ν¬λ€λ λ§μ, λ§ κ·Έλλ‘ κ°μ²΄λ₯Ό μμ±ν λλ§λ€ λκ° μΌμ λ§μ΄ ν΄μΌνλ€λ λ»μ΄λ€.
μλ₯Ό λ€μ΄ RPG κ²μμ μΊλ¦ν°λ₯Ό νλ ꡬνν΄λ³Έλ€κ³ μκ°ν΄λ³΄μ. μ΄ μΊλ¦ν°λ μ¬λ¬κ°μ§ μ₯λΉλ₯Ό μ₯μ°©ν μ μλ κΈ°λ₯μ κ°μ§κ³ μλλ°, μ²μ μΊλ¦ν°κ° μμ±λ λ λΈλ 맨 λͺΈμΌλ‘ μμνλ©΄ μ μ λ€μ΄ μ«μ΄ν κ² κ°μΌλ κΈ°λ³Έμ μΈ μ₯λΉ λͺ κ°μ§λ₯Ό μ₯μ°©ν μνλ‘ μμ±λ μ μλλ‘ λ§λ€μ΄μ£Όλ €κ³ νλ€.
// Player.java
class Weapon {}
class Armor {}
class BasicSward extends Weapon {}
class BasicArmor extends Armor {}
class Player {
public Weapon weapon;
public Armor armor;
public Player() {
this.weapon = new BasicSward(); // μ΄μ¬μμ λͺ©λ
this.armor = new BasicArmor(); // μ΄λ³΄μμ© κ°μ£Ό
}
}
κ°λ¨νκ² λ§λ€μ΄λ³΄λ©΄ λμΆ© μ΄λ° λλμ΄λ€. Player
κ°μ²΄λ μμ μ΄ μμ±λ λ BasicSward
κ°μ²΄μ BasicArmor
κ°μ²΄κΉμ§ ν¨κ» μμ±ν΄μΌνλ€.
μ΄λ° κ²½μ° κ·Έλ₯ Player
κ°μ²΄λ§ μμ±νλ μν©λ³΄λ€λ κ°μ²΄μ μμ± λΉμ©μ΄ λλ€
κ³ ν μ μλ€. κ²λ€κ° μΊλ¦ν° μμ± μ μ²μ λΆμ¬νλ μμ΄ν
μ μ’
λ₯κ° λ§μμ§μλ‘ Player
μ κ°μ²΄μ μμ± λΉμ© λν κ³μ λμμ§ κ²μ΄λ€.
μβ¦ κ·Όλ° κ³°κ³°ν μκ°ν΄λ³΄λ μΊλ¦ν°κ° μ²μ μμ±λλ©° κ°μ§κ³ μλ μμ΄ν
μ΄ νμ κ°λ€λ μ μ μ‘°κ±΄μ΄ μλ€λ©΄ μμ± λΉμ©μ΄ λμ Player
κ°μ²΄λ₯Ό λ± νλ²λ§ μμ±νκ³ κ·Έ λ€μλΆν°λ μμ±λ κ°μ²΄λ₯Ό 볡μ¬ν΄μ μ¬μ©ν΄λ λ κ² κ°λ€λ μκ°μ΄ λ λ€.
// μ΄κ±΄ λ무 κ°μ²΄ μμ± λΉμ©μ΄ λμΌλκΉ...
Player evan = new Player();
Player john = new Player();
Player wilson = new Player();
// μ΄λ° λ°©λ²μΌλ‘ μ κ·Όν΄λ³΄λ κ²μ μ΄λ¨κΉ?
Player player = new Player();
Player evan = player.clone();
Player john = player.clone();
Player wilson = player.clone();
μ΄λ° κ΄μ μΌλ‘ μ κ·Όνλ κ²μ΄ λ°λ‘ νλ‘ν νμ
ν¨ν΄μ΄λΌκ³ ν μ μλ€. νλ‘ν νμ
, μ¦ μλ³Έ κ°μ²΄
κ° μ‘΄μ¬νκ³ κ·Έ κ°μ²΄λ₯Ό 볡μ ν΄μ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μΈ κ²μ΄λ€.
μ€μ λ‘ μλ°μμ νλ‘ν νμ
ν¨ν΄μ μ¬μ©ν λ, 볡μ λμμ΄ λλ ν΄λμ€λ λ³΄ν΅ Cloneable
μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬ κ΅¬ννλ€. Cloneable μΈν°νμ΄μ€μλ clone
λ©μλκ° μ μλμ΄ μκΈ° λλ¬Έμ, μ΄ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ ν΄λμ€λ λ°λμ clone
λ©μλλ₯Ό μ€λ²λΌμ΄λ©ν΄μ ꡬνν΄μΌνλ€.
class Player implements Cloneable {
//...
@Override
public Player clone () throws CloneNotSupportedException {
return (Player)super.clone();
}
}
clone
λ©μλλ₯Ό ꡬννκ³ λλ©΄ μ΄μ Player
κ°μ²΄λ λ³΅μ¬ κ°λ₯ν κ°μ²΄κ° λλ€. μ¦, λ€λ₯Έ κ°μ²΄λ€μ μλ³Έ κ°μ²΄κ° λ μ μλ κΈ°λ₯μ κ°μ§κ² λμλ€λ κ²μ΄λ€.
μ΄μ λΆν°λ Player
κ°μ²΄λ₯Ό μΆκ°λ‘ μμ±νκ³ μΆμ λλ κΈ°μ‘΄μ μμ±λμ΄ μλ κ°μ²΄λ₯Ό κ·Έλλ‘ λ³΅μ¬νλ©΄ λκΈ° λλ¬Έμ λμ κ°μ²΄ μμ± λΉμ©μ΄ λλ κ²μ νΌν μ μλ€.
Player evan = new Player();
Player evanClone = evan.clone();
λν Player
κ°μ²΄λ 볡μ¬λμ΄ μλ‘μ΄ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉλ°μ§λ§, κΉμ 볡μ¬λ₯Ό νμ§ μλ μ΄μ Player
κ°μ²΄κ° κ°μ§κ³ μλ BasicSward
κ°μ²΄μ BasicArmor
κ°μ²΄λ μλ‘κ² μμ±λμ§ μκ³ κΈ°μ‘΄μ μ΄ κ°μ²΄λ€μ΄ ν λΉλ λ©λͺ¨λ¦¬ 곡κ°μ μ°Έμ‘°νκΈ°λ§ νλ€.
μ¦, μλ§ μ΄λ€λ©΄ λ©λͺ¨λ¦¬ 곡κ°μ μλ μλ μλ€λ κ²μ΄λ€. μλ°μ€ν¬λ¦½νΈμμ μμ μλ£νμ Call by value
, κ·Έ μΈ μλ£νμ Call by reference
λ₯Ό μ¬μ©νλ κ²κ³Ό λμΌν μ리μ΄λ€.
μ¬κΈ°κΉμ§ λ£κ³ λμ μμνμ λΆλ€λ μκ² μ§λ§, κ·Έ λ§μΈ μ¦μ¨ μ κΉ μ μ μ€ λκ³ μ½λ©νλ€λ³΄λ©΄ μ΄λ° μ¬ν μν©λ λ°μν μ μλ€λ λ»μ΄λ€.
Player evan = new Player();
try {
Player evanClone = evan.clone();
evanClone.weapon.attackPoint = 40;
System.out.println("μλ° λ¬΄κΈ° 곡격λ ₯ -> " + evan.weapon.attackPoint);
System.out.println("μλ° λ³΅μ¬λ³Έ 무기 곡격λ ₯ -> " + evanClone.weapon.attackPoint);
}
catch (Exception e) {
System.err.println(e);
}
μλ° λ¬΄κΈ° 곡격λ ₯ -> 40
μλ° λ³΅μ¬λ³Έ 무기 곡격λ ₯ -> 40
μ 리ν΄λ³΄μλ©΄ νλ‘ν νμ
ν¨ν΄μ΄λ, κ°μ²΄λ₯Ό μμ±ν λ μλ³Έμ΄ λλ κ°μ²΄λ₯Ό 볡μ¬ν΄μ μμ±νλ ν¨ν΄
μ΄λΌκ³ ν μ μλ€.
λ¬Όλ‘ μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ μ λ¨μν λͺ κ°μ κ°μ²΄κ° 볡μ κ΄κ³λ₯Ό κ°μ§λ κ²μ΄ μλλΌ, μλ°μ€ν¬λ¦½νΈ λ΄μ λͺ¨λ κ°μ²΄ μ μ²΄κ° λ³΅μ κ΄κ³λ‘ μ½νμκΈ° λλ¬Έμ μ΄κ²λ³΄λ€λ μ½κ° λ 볡μ‘νκΈ΄ νμ§λ§, κ·Όλ³Έμ μΈ μ리 μ체λ νλ‘ν νμ ν¨ν΄μ λ°λΌκ°λ€.
κ·ΈλΌ μ΄μ μλ°μ€ν¬λ¦½νΈκ° κ°μ²΄λ₯Ό μμ±ν λ νλ‘ν νμ ν¨ν΄μ μ΄λ€ μμΌλ‘ μ¬μ©νκ³ μλ μ§ νλ² μμ보λλ‘ νμ.
μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ
μμ μ€λͺ νλ―μ΄ νλ‘ν νμ ν¨ν΄μ κ°μ²΄λ₯Ό μμ±ν λ μ¬μ©νλ ν¨ν΄μ΄λ€. νμκ° μμμ μμλ‘ μ¬μ©ν μΈμ΄μΈ μλ°λ ν΄λμ€ κΈ°λ° νλ‘κ·Έλλ°μ μ§μνκΈ° λλ¬Έμ, νΉμν ν¨ν΄μ μ¬μ©ν΄μΌμ§λ§ νλ‘ν νμ μ΄λΌλ κ°λ μ μ¬μ©ν μ μλ€.
κ·Έλ¬λ μ μ΄μ νλ‘ν νμ κΈ°λ° νλ‘κ·Έλλ°μ μ§μνλ μλ°μ€ν¬λ¦½νΈμ κ²½μ°μλ μ μ΄μ λͺ¨λ κ°μ²΄λ₯Ό μμ±ν λ νλ‘ν νμ μ μ¬μ©νκΈ° λλ¬Έμ, κ°μ²΄λ₯Ό μμ±νκΈ°λ§ ν΄λ μμμ νμκ° μ€λͺ ν νλ‘ν νμ ν¨ν΄μ΄ μ μ©λλ€.
κ·Έλ κΈ° λλ¬Έμ μ°μ μλ°μ€ν¬λ¦½νΈμμ λ§νλ κ°μ²΄(Object)
κ° λ¬΄μμΈμ§, κ·Έλ¦¬κ³ κ·Έ κ°μ²΄κ° μμ±λλ€λ κ²μ΄ 무μμ μλ―Ένλ κ²μΈμ§ μμλ³Ό νμκ° μλ€.
μλ°μ€ν¬λ¦½νΈκ° κ°μ²΄λ₯Ό μμ±νλ λ°©λ²
μ»΄ν¨ν° 곡νμμμ κ°μ²΄(Object)
λ νμ€μ μ¬λ¬Όμ νλ‘κ·Έλ¨μ λ°μν κ²
μ΄λ€. μ¦, μ¬λ¬ κ°μ νλ‘νΌν°(νΉμ§)μ λ©μλ(νμ)λ₯Ό κ°μ§κ³ νμ€μ μ¬λ¬Όμ νλ΄λ΄λ μ‘΄μ¬μΈ κ²μ΄λ€.
ν΄λμ€ κΈ°λ° μΈμ΄μμλ ν΄λμ€λ₯Ό μμ±νκ³ κ·Έ ν΄λμ€λ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν΄μΌνμ§λ§, μλ°μ€ν¬λ¦½νΈλ κ°λ¨ν λ¬Έλ²λ§μΌλ‘ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
const evan = {
name: 'Evan',
age: 29,
say: function () {
console.log(`Hi, I am ${this.name}!`);
}
};
μ΄λ° λ°©μμ μ°λ¦¬λ 리ν°λ΄(Literal)
λ‘ κ°μ²΄λ₯Ό μ μΈνλ€κ³ νλ€. 리ν°λ΄μ μμ€ μ½λμ κ³ μ λ κ°μ λννλ μΌμ’
μ λ¨μΆμ΄ κ°μ κ°λ
μ΄κΈ° λλ¬Έμ, μ°λ¦¬λ κ°λ¨ν λ¬Έλ²λ§μΌλ‘ κ°μ²΄λ₯Ό μμ±νλ€κ³ λλΌμ§λ§ λ΄λΆμ μΌλ‘λ κ°μ²΄λ₯Ό μμ±νλ μΌλ ¨μ 맀컀λμ¦μ΄ μλνκ³ μλ€.
μλ₯Ό λ€μ΄, λ€λ₯Έ μΈμ΄μμλ μ΄λ° 리ν°λ΄ λ¬Έλ²μ μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν λ λ΄λΆμ μΌλ‘ ν΄λμ€
λ₯Ό μ¬μ©νκ²λλ€. νμ΄μ¬ κ°μ κ²½μ°, λμ
λ리λ₯Ό 리ν°λ΄λ‘ μ μΈνκ³ νμ
μ μ°μ΄λ³΄λ©΄ dict
ν΄λμ€κ° μΆλ ₯λλ κ²μ λ³Ό μ μλ€.
my_dict = {
'name': 'Evan',
'age': 29
}
type(my_dict)
<class 'dict'>
μ°λ¦¬λ dict({ 'name': 'Evan', 'age': 29 })
μ κ°μ΄ ν΄λμ€λ₯Ό λͺ
μμ μΌλ‘ μ¬μ©νμ§μκ³ λ¦¬ν°λ΄λ‘ λμ
λ리λ₯Ό μμ±νμ§λ§ λ΄λΆμ μΌλ‘λ μ λλ‘ dict
ν΄λμ€λ₯Ό μ¬μ©ν΄μ κ°μ²΄λ₯Ό μμ±νλ€λ κ²μ΄λ€.
μλ° λν 리ν°λ΄ λ¬Έλ²μ μ§μνλ λ°°μ΄(Array)
μ μ μΈν ν μΆλ ₯ν΄λ³΄λ©΄ κ²°κ΅ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ λ°°μ΄ κ°μ²΄λ₯Ό μμ±νλ€λ κ²μ μ μ μλ€.
String[] array = {"Evan", "29"};
System.out.println(array);
[Ljava.lang.String;@7852e922
μ΄ λ§μΈ μ¦μ¨, λ€λ₯Έ μΈμ΄μ λ§μ°¬κ°μ§λ‘ μλ°μ€ν¬λ¦½νΈμ κ°μ²΄λ κ°μκΈ° νΌμμ λΏ νκ³ μμ±λλ κ²μ΄ μλλΌ λΆλͺ ν λκ°λ₯Ό μ¬μ©ν΄μ λ§λ€μ΄λ΄κ³ μλ€λ λ§μ΄λ€.
νμ§λ§ μλ°μ€ν¬λ¦½νΈμλ ν΄λμ€λΌλ κ°λ μμ²΄κ° μλλ° λ μ¬μ©ν΄μ κ°μ²΄λ₯Ό λ§λ€μ΄λ΄κ³ μλ κ²μΌκΉ?
λ΅μ λ°λ‘
ν¨μ(Function)
μ΄λ€.
μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄κ° μμ±λλ μ리λ₯Ό μ‘°κΈ λ νν€μ³λ³΄κΈ° μν΄μ μμμ 리ν°λ΄λ‘ μ μΈνλ evan
κ°μ²΄λ₯Ό μ΄λ²μλ λ€λ₯Έ λ°©λ²μΌλ‘ μ μΈν΄λ³΄λλ‘ νκ² λ€.
const evan = new Object({
name: 'Evan',
age: 29,
});
μ μ§ ν΄λμ€ κΈ°λ° μΈμ΄μμ ν΄λμ€λ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νλ κ²κ³Ό μ μ¬ν λ¬Έλ²μ΄ λνλ¬λ€. μ΄λ° λ°©μμ μμ±μ(Constructor)
λ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νλ€κ³ νλ€.
ν΄λμ€ κΈ°λ° μΈμ΄λΌλ©΄ Object
λ ν΄λμ€κ² μ§λ§, μλ°μ€ν¬λ¦½νΈμμλ ν΄λμ€κ° μλ ν¨μμ΄λ€.
μ¦, μλ°μ€ν¬λ¦½νΈμμμ μμ±μλ ν¨μκ° κ°μ§κ³ μλ€λ κ²μ΄λ€. μ κ² μ§μ§ ν¨μμΈμ§ μκ³ μΆμΌλ, λΈλΌμ°μ μ½μ μ°½μ μ΄κ³ Object
λ₯Ό νλ² μΆλ ₯ν΄λ³΄λλ‘ νκ² λ€.
console.log(Object);
console.log(typeof Object);
Ζ Object() { [native code] }
"function"
μ, μ½μλ‘ μ°μ΄λ³΄λ Object
λ νμ€νκ² λΉΌλ°μΊνΈ ν¨μκ° λ§λ€.
νμκ° μ²μ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νκΈ° μμνμ λ λ°μλ€μ΄κΈ° μ΄λ €μ λ λΆλΆμ΄ λ°λ‘ μ΄ λΆλΆμ΄μλ€.
ν΄λμ€ κΈ°λ° νλ‘κ·Έλλ°μ μ΅μνλ νμμκ² new
ν€μλμ μμ±μλ ν΄λμ€λ§ κ°μ§ μ μλ κ²μ΄μλλ° κ°μκΈ° λ¬κΈμμ΄ ν¨μκ° λμλ²λ¦¬λ λ°μλ€μ΄κΈ° νλ€μλ κ² κ°λ€.(머리λ‘λ μκ² λλ° λ§μμ΄β¦)
μ΄μ¨λ μ΄μ μλ°μ€ν¬λ¦½νΈκ° κ°μ²΄λ₯Ό μμ±ν λ ν¨μλ₯Ό μ¬μ©ν΄μ μμ±νλ€λ κ²μ μκ²λμλ€. μ§κΈκΉμ§ μμλΈ λ΄μ©μ μ 리ν΄λ³΄μλ©΄ λ€μκ³Ό κ°λ€.
- νλ‘ν νμ ν¨ν΄μ΄λ κ°μ²΄λ₯Ό μμ±ν λ μλ³Έ κ°μ²΄λ₯Ό 볡μ νμ¬ μμ±νλ λ°©λ²μ΄λ€.
- μλ°μ€ν¬λ¦½νΈλ κ°μ²΄λ₯Ό μμ±ν λ νλ‘ν νμ ν¨ν΄μ μ¬μ©νλ€.
- μλ°μ€ν¬λ¦½νΈλ κ°μ²΄λ₯Ό μμ±ν λ ν¨μλ₯Ό μ¬μ©νλ€.
κ·Έλ λ€λ κ²μ μλ°μ€ν¬λ¦½νΈκ° ν¨μλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±ν λ λκ°
λ₯Ό μ°Έμ‘°νκ³ λ³΅μ ν΄μ κ°μ²΄λ₯Ό μμ±νλ€λ λ§μ΄λ€. μ΄μ λΆν° κ·Έ λκ°
λ₯Ό μμ λ³Ό μκ°μ΄λ€.
λλ체 λ 볡μ ν΄μ κ°μ²΄λ₯Ό λ§λλ κ±ΈκΉ?
μ¬μ€ λμμΈ ν¨ν΄μΌλ‘μ¨μ νλ‘ν νμ
ν¨ν΄μ μκ°λ³΄λ€ κ·Έλ κ² μ΄λ ΅μ§ μλ€. κ·Έμ κ°μ²΄λ₯Ό μμ±ν λ μλ³Έ κ°μ²΄λ₯Ό 볡μ
ν΄μ μμ±νλ€λ κ°λ
μ΄κΈ° λλ¬Έμ΄λ€.
λ§μ°¬κ°μ§λ‘ μλ°μ€ν¬λ¦½νΈ λν λκ°λ₯Ό 볡μ ν΄μ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νκ³ μλ€. κ·ΈλΌ μ΄μ μλ°μ€ν¬λ¦½νΈκ° λλ체 λ 볡μ ν΄μ κ°μ²΄λ₯Ό μμ±νκ³ μλ κ²μΈμ§ μμ보기 μν΄ κ°λ¨ν ν¨μλ₯Ό νλ μ μΈν΄λ³΄λλ‘ νκ² λ€.
function User () {}
const evan = new User();
console.log(evan);
console.log(typeof evan);
User { __proto__: Object }
object
μμμ μ΄μΌκΈ°νλ―μ΄ μλ°μ€ν¬λ¦½νΈλ ν¨μλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νκΈ° λλ¬Έμ, μ΄λ κ² ν΄λμ€λ₯Ό μ¬μ©νλ κ²κ³Ό μ μ¬ν λλμΌλ‘ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
κ·Έλ λ€λ©΄ evan
κ°μ²΄λ 무μμΌλ‘λΆν° 볡μ λ κ²μΌκΉ? κ°λ¨νκ² μκ°νλ©΄ User
ν¨μλΌκ³ μκ°ν΄λ³Όμ μκ² μ§λ§, μ¬μ€μ User
ν¨μλ₯Ό 볡μ ν κ²μ΄ μλλΌ User ν¨μμ νλ‘ν νμ
κ°μ²΄
λ₯Ό 볡μ ν κ²μ΄λ€.
λ¬κΈμμ΄μ λ°λ‘ μ΄ν΄κ° μλ μλ μκ² μ§λ§, λ¨μνκ² μκ°ν΄λ³΄λ©΄ μ½λ€. λ§μ½ κ°μ²΄λ₯Ό μμ±νλ©΄μ ν¨μλ₯Ό 볡μ νλ€λ©΄ μμ±λ κ°μ²΄λ object
νμ
μ΄ μλλΌ function
νμ
μ΄μ΄μΌ νμ§ μκ² λκ°?
νμ§λ§ evan
κ°μ²΄λ object
νμ
μ κ°μ§κ³ μλ€. μ¦, μ΄ ν¨μ μμ²΄κ° μλλΌ λ€λ₯Έ κ°μ²΄ νμ
μ 무μΈκ°λ₯Ό 볡μ νλ€λ κ²μ΄κ³ , κ·Έ μλ³Έ κ°μ²΄κ° User ν¨μμ νλ‘ν νμ
κ°μ²΄
μΈ κ²μ΄λ€.
νμλ User
ν¨μμ νλ‘ν νμ
μ λͺ
μμ μΌλ‘ μ μΈνμ§ μμμ§λ§, μλ°μ€ν¬λ¦½νΈλ ν¨μκ° μμ±λ λ μλμΌλ‘ κ·Έ ν¨μμ νλ‘ν νμ
κ°μ²΄(Prototype Object)
λ ν¨κ» μμ±νκ³ ν΄λΉ ν¨μμ prototype
νλ‘νΌν°μ μ°κ²°ν΄λλ€.
function User () {}
console.log(User.prototype);
console.log(typeof User.prototype);
{ constructor: f User(), __proto__: Object }
object
λΆλͺ
ν νμλ ν¨μλ§ μ μΈνλλ°, User.prototype
νλ‘νΌν°μ λκ° μ΄κ²μ κ² κ°μ§κ³ μλ κ°μ²΄ λ
μμ΄ 1+1μΌλ‘ λΆμ΄λμλ€. ν¨μλ₯Ό μμ±νλ©΄ 무쑰건 κ·Έ ν¨μμ νλ‘ν νμ
κ°μ²΄λ ν¨κ» μμ±λλ€λ κ²μ΄ ν€ν¬μΈνΈλ€.
κ·Έλ¦¬κ³ μ΄ νλ‘ν νμ κ°μ²΄λ ν¨μλ₯Ό μ¬μ©ν΄μ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±ν λ μλ³Έ κ°μ²΄ μν μ ν΄μ€ κ°μ²΄λ₯Ό μλ―Ένλ€.
μ¦, new User()
λΌλ λ¬Έλ²μ μ¬μ©νμ¬ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ€κ² λλ©΄ User
ν¨μ μμ²΄κ° μλλΌ User
ν¨μκ° μμ±λ λ ν¨κ» μμ±λ User ν¨μμ νλ‘ν νμ
κ°μ²΄
λ₯Ό 볡μ ν΄μ μλ‘μ΄ κ°μ²΄λ₯Ό λ§λ λ€λ κ²μ΄λ€.
μ΄λ User
ν¨μκ° μμ±λλ©° ν¨κ» μμ±λ User ν¨μμ νλ‘ν νμ
κ°μ²΄λ₯Ό νλ‘ν νμ
νλ‘νΌν°(Prototype Property)
λΌκ³ νλ€.
κ·ΈλΌ μ΄ νλ‘ν νμ
κ°μ²΄κ° κ°μ§κ³ μλ νλ‘νΌν°μΈ constructor
μ __proto__
λ λ μλ―Ένλ κ±ΈκΉ?
constructor
ν¨μκ° μμ±λλ©° ν¨κ» μμ±λ νλ‘ν νμ
κ°μ²΄λ λͺ¨λ constructor
λΌλ νλ‘νΌν°λ₯Ό κ°μ§κ³ μλ€. κ·Έλ¦¬κ³ μ΄ νλ‘νΌν°μλ μ΄ νλ‘ν νμ
κ°μ²΄κ° μμ±λ λ μ μΈνλ ν¨μκ° λ€μ΄μλ€.
console.log(User.prototype);
{
constructor: f User(),
__proto__: Object
}
ν¨μλ₯Ό μ μΈνλ©΄ ν¨μμ ν¨κ» ν΄λΉ ν¨μμ νλ‘ν νμ
κ°μ²΄λ ν¨κ» μμ±λλ©° μ΄ λμ μ°κ²°νκ² λλ€. μ΄λ ν¨μλ νλ‘ν νμ
κ°μ²΄μ constructor
νλ‘νΌν°λ‘ μ°κ²°λκ³ , νλ‘ν νμ
κ°μ²΄λ ν¨μμ prototype
νλ‘νΌν°λ‘ μ°κ²°λλ κ²μ΄λ€.
console.log(User.prototype.constructor === User);
true
μ΄ μμ±μ νλ‘νΌν°λ μ΄ ν¨μλ₯Ό ν΅ν΄ μμ±λ κ°μ²΄ μ
μ₯μμ 보μμ λ λλ₯Ό λ§λ€ λ μ΄λ€ ν¨μκ° νΈμΆλμλ?
λ₯Ό μλ―Ένλ€. λ§μ½ μ΄ μ°κ²°μ΄ μλ€λ©΄ μλ‘ μμ±λ κ°μ²΄λ μμ μ λ§λ€ λ μ΄λ€ μμ±μ ν¨μκ° νΈμΆλμλμ§ μ μκ° μλ€.
μλ‘κ² μμ±λ κ°μ²΄λ μμ μ μμ±ν λ μ΄λ€ μλ³Έ κ°μ²΄λ₯Ό 볡μ¬νλμ§μ λν λ§ν¬λ κ°μ§κ³ μμ§λ§ μ΄λ€ μμ±μκ° νΈμΆλμλμ§μ λν λ§ν¬λ κ°μ§κ³ μμ§ μκΈ° λλ¬Έμ΄λ€.
νμ§λ§ μλ³Έ κ°μ²΄μ constuctor
νλ‘νΌν°μ μμ±μ ν¨μκ° μ°κ²°λμ΄μκΈ° λλ¬Έμ μλ‘κ² λ§λ€μ΄μ§ κ°μ²΄λ μμ μ μλ³Έ κ°μ²΄μ μ κ·Όν΄μ μ΄ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν¨μΌλ‘μ¨ μμ μ΄ λ§λ€μ΄μ§λ μ΄λ€ μμ±μ ν¨μκ° νΈμΆλμλμ§λ₯Ό μ μ μλ€.
const evan = new User();
console.log(evan.__proto__.constructor === User);
true
μ΄λ μμ±λ κ°μ²΄κ° μμ μ μλ³Έ κ°μ²΄μ μ κ·Όν μ μλ νλ‘νΌν°κ° λ°λ‘ __proto__
νλ‘νΌν°μ΄λ€.
__proto__
λ°©κΈ μμ±μλ₯Ό μ€λͺ
νλ©΄μ ν¨μλ₯Ό ν΅ν΄ μλ‘κ² μμ±λ κ°μ²΄λ μλ³Έ κ°μ²΄μμ μ°κ²°μ κ°μ§κ³ μλ€κ³ νλ€. μ΄λ μ΄ μ°κ²°μ νλ‘ν νμ
λ§ν¬(Prototype Link)
λΌκ³ νλ€.
Object.prototype
μ μ μΈν μλ°μ€ν¬λ¦½νΈ λ΄μ λͺ¨λ κ°μ²΄λ μλ³Έ κ°μ²΄λ₯Ό κΈ°λ°μΌλ‘ 볡μ¬λμ΄ μμ±λμκΈ° λλ¬Έμ, μμ μ μλ³Έ κ°μ²΄λ‘ μ°κ²°λμ΄μλ νλ‘ν νμ
λ§ν¬ λν λͺ¨λ κ°μ²΄κ° κ°μ§κ³ μλ€. μ΄λ μ΄ λ§ν¬κ° λ΄κΈ°λ νλ‘νΌν°κ° __proto__
νλ‘νΌν°μ΄λ€.
Object.prototype.__proto__
κ° μ‘΄μ¬νμ§ μλ μ΄μ λ λ°μμ νμ νλλ‘ νκ² λ€. μ°μ μ κ°μ²΄λ€μ΄ μμ μ μλ³Έ κ°μ²΄λ‘ ν΅νλ νλ‘ν νμ
λ§ν¬λ₯Ό κ°μ§κ³ μλ€λ μ¬μ€μλ§ μ§μ€νμ.
μ΄ ν¬μ€ν μμλ μ΄ν΄λ₯Ό λκΈ°μν΄
__proto__
νλ‘νΌν°λ₯Ό κ·Έλλ‘ μ¬μ©νκ³ μλ€. κ·Έλ¬λ ν΄λΉ νλ‘νΌν°λ ECMAScript 2015μμλ νμ€μ΄μμ§λ§ νμ¬λ νμ€μ΄ μλλ―λ‘Object.getPrototypeOf()
λ₯Ό μ¬μ©νλ κ²μ μΆμ²νλ€.
μ¦ User
ν¨μλ₯Ό μ¬μ©νμ¬ μμ±ν κ°μ²΄λ User.prototype
κ°μ²΄λ₯Ό 볡μ¬νμ¬ μμ±λ κ°μ²΄μ΄κΈ° λλ¬Έμ, μ΄ κ°μ²΄λ€μ μλ³ΈμΈ User.prototype
κ°μ²΄λ₯Ό μμ μ __proto__
νλ‘νΌν°μ μ°κ²°ν΄λλ κ²μ΄λ€.
function User () {}
const evan = new User();
console.log(evan.__proto__ === User.prototype);
true
κ·Έλ λ€λ©΄ μ΄ νλ‘ν νμ λ§ν¬λ₯Ό μ¬μ©ν΄μ κ³μ ν΄μ μλ³Έ κ°μ²΄λ₯Ό μΆμ νλ€λ³΄λ©΄, κ²°κ΅μ μλ°μ€ν¬λ¦½νΈ λ΄μ λͺ¨λ κ°μ²΄λ€μ΄ μ΅μ’ μ μΌλ‘ μ΄λ€ μλ³Έ κ°μ²΄λ₯Ό 볡μ¬ν΄μ μμ±λ κ²μΈμ§ μ μ μμ§ μμκΉ?
νλ‘ν νμ 체μΈ
μλ°μ€ν¬λ¦½νΈ λ΄μ μ¬μ©λλ λͺ¨λ κ°μ²΄λ€μ μ λΆ μ΄λ° νλ‘ν νμ
κΈ°λ° λ°©μμΌλ‘ μ μλκ³ μμ±λλ€. μ¦, String
, Boolean
, Array
μ κ°μ΄ μ°λ¦¬κ° μΌλ°μ μΌλ‘ μ¬μ©νκ³ μλ λΉνΈμΈ κ°μ²΄λ€λ λͺ¨λ κ°μ λ°©μμ μ¬μ©ν΄μ λ§λ€μλ€λ κ²μ΄λ€.
κ·Έλ λ€λ©΄ μ΄ κ°μ²΄λ€μ μ΄λ€ νλ‘ν νμ κ°μ²΄λ₯Ό 볡μ¬ν΄μ λ§λ€μ΄μ§ κ²μΌκΉ?
String, Boolean, Arrayλ λκ° λλ μλ°μ€ν¬λ¦½νΈ λ΄μ μ‘΄μ¬νλ λͺ¨λ κ²λ€μ λ°λ‘ Object
ν¨μμ νλ‘ν νμ
μΈ Object.prototype
μ μμμΌλ‘ ν΄μ 볡μ λλ€.
μμμ __proto__
λ₯Ό μ€λͺ
νλ©΄μ Object.prototype
κ°μ²΄λ νλ‘ν νμ
λ§ν¬, μ¦ μλ³Έ κ°μ²΄λ‘ ν΅νλ λ§ν¬κ° μλ€κ³ μ΄μΌκΈ°νμλλ°, κ·Έ μ΄μ λ λ°λ‘ Object.prototype
μ΄ λͺ¨λ κ°μ²΄λ€μ μ‘°μλμ΄κΈ° λλ¬Έμ΄λ€.
μ΄κ² μ λ§μΈμ§ νμΈν΄λ³΄κ³ μΆλ€λ©΄, μ무 κ°μ²΄λ 골λΌμ‘μμ κ·Έ κ°μ²΄μ __proto__
νλ‘νΌν°λ₯Ό ν΅ν΄ μμ μ¬λΌκ°λ³΄λ©΄ λλ€.
μΌλ¨ λ§λ§ν String
μ μ¬μ©ν΄μ μ‘°μμ μΆμ ν΄λ³΄λ €κ³ νλλ°, String
κ°μ²΄λ₯Ό μμ±νλ ν¨μλΆν° μΆλ°ν κ²μΈμ§, String
ν¨μλ₯Ό ν΅ν΄ μμ±λ κ°μ²΄λΆν° μΆλ°ν κ²μΈμ§μ λ°λΌ μ‘°μκΉμ§ μ¬λΌκ°λ κΈΈμ΄ λ¬λΌμ§λ€.
String ν¨μ
μ String κ°μ²΄
λ λΉμ°ν μλ³Έμ΄ λλ κ°μ²΄λ λ€λ₯΄κΈ° λλ¬Έμ΄λ€. νμλ κ·Έ μ€ String κ°μ²΄λ₯Ό μμ±ν μ μλ String μμ±μ ν¨μλ₯Ό μ ννλ€.
const first = String.__proto__;
const second = first.__proto__;
console.log('첫λ²μ§Έ μ‘°μ -> ', first.constructor.name);
console.log('λλ²μ§Έ μ‘°μ -> ', second.constructor.name);
첫 λ²μ§Έ μ‘°μ -> Function
λ λ²μ§Έ μ‘°μ -> Object
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ ν¨μλ μμ μ μλ³ΈμΌλ‘ Function.prototype
κ°μ²΄λ₯Ό μλ³ΈμΌλ‘ κ°μ§λ€. κ·Έλ¦¬κ³ Function.prototypeμ κ²°κ΅ κ°μ²΄μ΄κΈ° λλ¬Έμ, λΉμ°ν μλ³ΈμΌλ‘ Object.prototype
κ°μ²΄λ₯Ό μλ³ΈμΌλ‘ κ°μ§λ€.
κ·ΈλΌ μ¬κΈ°μ νλ² λ μ¬λΌκ°λ©΄ μ΄λ»κ² λ κΉ?
const third = second.__proto__;
console.log(third.constructor.name);
Uncaught TypeError: Cannot read property 'constructor' of null at <anonymous>:1:28
μ, TypeError
κ° λ°μνλ€. μλ¬λ©μΈμ§λ₯Ό 보μνλ Object.prototype
κ°μ²΄μ μλ³Έ κ°μ²΄μΈ Object.prototype.__proto__
λ null
μΈ λͺ¨μμ΄λ€.
μ¦, Object
μ μλ‘λ λ μ΄μ μ‘°μμ΄ μλ κ²μ΄λ€. μ§κΈ μ΄ν΄λ³Έ μ΄ κ΄κ³λ₯Ό κ°λ¨ν λ€μ΄μ΄κ·Έλ¨μΌλ‘ λνλ΄μ΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
λκ° λ³΅μ‘ν΄λ³΄μ΄μ§λ§ λ³ κ² μλ€. String ν¨μ
μ μλ³Έ κ°μ²΄λ Function.prototype
μ΄λ€. κ·Έλ¦¬κ³ const a = 'evan'
κ³Ό κ°μ΄ μ μΈλ String κ°μ²΄λ μμ μ μμ±ν String ν¨μμ String.prototype
μ μλ³ΈμΌλ‘ κ°μ§ κ²μ΄κ³ , String.prototype
μ κ°μ²΄μ΄κΈ° λλ¬Έμ λΉμ°ν Object.prototype
μ μλ³ΈμΌλ‘ κ°μ§λ κ²μ΄λ€.
μ΄λ κ² νλ‘ν νμ
μΌλ‘ μ΄λ£¨μ΄μ§ κ°μ²΄λ€μ κ΄κ³λ₯Ό νλ‘ν νμ
체μΈ(Prototype Chain)
μ΄λΌκ³ νλ€.
λ§μΉλ©°
μ¬μ€ νμκ° νλ‘ν νμ
μ λν ν¬μ€ν
μ μ°λ €κ³ νλ μ΄μ λ μΌλ§ μ λ©΄μ μμ μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ
μ μ¬μ©νμ¬ Private Static λ©μλ
λ₯Ό ꡬννλΌλ λ¬Έμ λ₯Ό λ°μλ€κ° κ²°κ΅ λͺ» νμκΈ° λλ¬Έμ΄λ€.
μλ°μ€ν¬λ¦½νΈμ ν΄λ‘μ μ νλ‘ν νμ μ νμ©νμ¬ νμ΄μΌνλ λ¬Έμ μλλ°, νμλ κΈ°λ³ΈκΈ°κ° λΆμ‘±ν λλ¨Έμ§ νμ΄λ΄μ§ λͺ»νλ€.
κ·Έλμ μλλ νλ‘ν νμ μ μ¬μ©ν λ€μν μμ κΈ°λ²λ€κ³Ό ν΄λ‘μ λ₯Ό μ¬μ©ν λ©€λ²μ μλ λ±λ ν¨κ» μκ°ν΄λ³΄λ €κ³ νμ§λ§, λ κ·Έλ λ― λΆλ μ‘°μ μ€ν¨λ‘ μΈν΄ λ€λ₯Έ ν¬μ€ν μμ λ³λλ‘ λ€λ€μΌν κ² κ°λ€.
νμμ²λΌ κΈ°μ‘΄μ ν΄λμ€ κΈ°λ° κ°μ²΄ μμ±λ°©μμ μ΅μν κ°λ°μλ€μκ² μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ μ κ½€λ 볡μ‘νκ² λκ»΄μ§λ€. λμμΈ ν¨ν΄μΌλ‘μ¨μ νλ‘ν νμ μ λ¨μν κ°μ²΄λ₯Ό 볡μ ν΄μ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ€λ μ λμ κ°λ μ κ·ΈμΉμ§λ§ μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ 체μΈμ κ·Έκ²λ³΄λ€ ν¨μ¬ λ 볡μ‘νκ² μ°κ²°λμ΄μκΈ° λλ¬Έμ΄λ€.
νμ§λ§ νλ‘ν νμ 체μΈμ΄λ νλ‘ν νμ μ μ¬μ©ν κ°μ’ μμ κΈ°λ²μ μ΄λ ΅κ² λκ»΄μ§ μ μμ΄λ, νλ‘ν νμ μ λΌλ μ체λ κ·Έλ κ² μ΄λ ΅μ§ μλ€κ³ μκ°νλ€.
- κ°μ²΄λ ν¨μλ₯Ό μ¬μ©ν΄μ λ§λ€μ΄μ§κ³ , κ°μ²΄λ ν¨μμ νλ‘ν νμ κ°μ²΄λ₯Ό 볡μ νμ¬ μμ±λλ€.
- λͺ¨λ κ°μ²΄λ μμ μ΄ μ΄λ€ μλ³Έ κ°μ²΄λ₯Ό 볡μ νμ¬ μμ±λ κ²μΈμ§μ λν μ 보λ₯Ό κ°μ§κ³ μλ€.
λ¬Όλ‘ μλ³Έ κ°μ²΄μ λν μ 보λ₯Ό λ°νμμ λμ μΌλ‘ λ³κ²½ν μ μλ λ± λ³νκ°μ μ§λ€μ΄ κ°λ₯νκΈ°λ νκ³ , μ΄λ₯Ό μ¬μ©ν λ€μν κΈ°λ²λ€λ μκΈ°λ νμ§λ§ κΈ°λ³Έμ κ²°κ΅ μ λ κ°μ§λΌκ³ ν μ μμ κ² κ°λ€. λ€μ ν¬μ€ν μμλ 본격μ μΌλ‘ νλ‘ν νμ μ μ¬μ©ν μμ κΈ°λ²κ³Ό κ°μ²΄μ νλ‘νΌν°λ₯Ό νμνλ λ°©λ²μΈ νλ‘ν νμ 룩μ λ±μ λν΄μ μ€λͺ νλλ‘ νκ² λ€.
μ΄μμΌλ‘ μλ°μ€ν¬λ¦½νΈμ νλ‘ν νμ νμ΄λ³΄κΈ° ν¬μ€ν μ λ§μΉλ€.
κ΄λ ¨ ν¬μ€ν 보λ¬κ°κΈ°