μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- μ½λ©ν μ€νΈ
- Flex
- νλ‘κ·Έλλ¨Έμ€
- history api
- useRef
- νλ‘ νΈμλ
- λ°λΈμ½μ€3κΈ°
- μκ³ λ¦¬μ¦
- μλ°μ€ν¬λ¦½νΈ
- CSS
- useEffect
- λ°λΈμ½μ€
- Props
- REACT
- fetch API
- float
- λΈλ‘κ·Έ
- Gatsby
- position
- Today
- Total
Daehyunii's Dev-blog
17μ₯ μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ³Έλ¬Έ
17μ₯ μμ±μ ν¨μμ μν κ°μ²΄ μμ±
Daehyunii 2022. 7. 10. 16:35κ°μ²΄λ₯Ό μμ±νλ λ°©μμλ μ¬λ¬κ°μ§κ° μλ€. λνμ μΌλ‘ μμ λ°°μ΄ κ°μ²΄ 리ν°λ΄μ μ¬μ©νλ λ°©λ²μ΄ μλ€. μ΄λ²μ κ³΅λΆ ν λ΄μ©μ μμ±μ ν¨μλ₯Ό ν΅ν κ°μ²΄ μμ±μ΄λ€.
17.1 Object μμ±μ ν¨μ(λΉνΈμΈ μμ±μ ν¨μ)
new μ°μ°μμ ν¨κ» Object μμ±μ ν¨μλ₯Ό νΈμΆνλ©΄ λΉ κ°μ²΄λ₯Ό μμ±νμ¬ λ°ννλ€. λΉ κ°μ²΄λ₯Ό μμ±ν μ΄ν νλ‘νΌν° λλ λ©μλλ₯Ό μΆκ°νμ¬ κ°μ²΄λ₯Ό μμ±ν μ μλ€. μμ±μ ν¨μλ new μ°μ°μμ ν¨κ» νΈμΆνμ¬ κ°μ²΄λ₯Ό μμ±νλ ν¨μλ₯Ό λ§νλ€. μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄λ₯Ό μΈμ€ν΄μ€λΌ νλ€. μλ°μ€ν¬λ¦½νΈλ Object μμ±μ ν¨μ μΈμλ μ¬λ¬κ°μ§ λΉνΈμΈ μμ±μ ν¨μλ₯Ό μ 곡νλ€. (String, Number, Boolean, Function, Array, Date, RegExp, Promise λ±λ± (λͺ¨λ κ°μ²΄λ₯Ό μμ±νλ μμ±μ ν¨μλ€.))
const person = new Object(); // λΉ κ°μ²΄ μμ±νμ¬ person λ³μμ ν λΉ
person.name = 'lee';
person.sayHello = function(){
console.log(`Hi my name is ${this.name}`);
};
console.log(person); // {name: 'lee', sayHello: Ζ}
person.sayHello(); // Hi my name is lee
17.2 μμ±μ ν¨μ
17.2.1 κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ λ¬Έμ μ
κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ μ§κ΄μ μ΄κ³ κ°νΈνλ€. νμ§λ§ κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ± λ°©μμ λ¨ νλμ κ°μ²΄λ§ μμ±νλ€. λ°λΌμ λμΌν νλ‘νΌν°λ₯Ό κ°λ κ°μ²΄λ₯Ό μ¬λ¬ κ° μμ±ν΄μΌ νλ κ²½μ° λ§€λ² κ°μ νλ‘νΌν°λ₯Ό κΈ°μ ν΄μΌ νκΈ° λλ¬Έμ λΉν¨μ¨μ μ΄λ€.
// κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ±
const circle1 = {
radius : 10,
getDiameter : function(){
return 2 * this.radius;
}
};
console.log(circle1.getDiameter()); // 20
const circle2 = {
radius : 20,
getDiameter : function(){
return 2 * this.radius;
}
};
console.log(circle2.getDiameter()); // 40
μμ μ½λ μ²λΌ νλ‘νΌν°λ κ°μ²΄λ§λ€ νλ‘νΌν° κ°μ΄ λ€λ₯Ό μ μμ§λ§ λ©μλλ λ΄μ©μ΄ λμΌν κ²½μ°κ° μΌλ°μ μ΄λ€. κ°μ²΄ 리ν°λ΄μ μν΄ κ°μ²΄λ₯Ό μμ±νλ κ²½μ° νλ‘νΌν° κ΅¬μ‘°κ° λμΌν¨μλ λΆκ΅¬νκ³ λ§€λ² κ°μ νλ‘νΌν°μ λ©μλλ₯Ό κΈ°μ ν΄μΌ νλ€. μ΄λ¬ν κ³Όμ μ λ§€μ° λΉν¨μ¨μ μ΄κ³ , λ©λͺ¨λ¦¬ κ³΅κ° νμ©μλ λ§€μ° λΉν¨μ¨ μ μ΄λ€.
17.2.2 μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ°©μμ μ₯μ
μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ°©μμ λ§μΉ κ°μ²΄λ₯Ό μμ±νκΈ° μν ν νλ¦Ώμ²λΌ μμ±μ ν¨μλ₯Ό μ¬μ©νμ¬ νλ‘νΌν° κ΅¬μ‘°κ° λμΌν κ°μ²΄ μ¬λ¬ κ°λ₯Ό κ°νΈνκ² μμ±ν μ μλ€.(κ°μ²΄λ₯Ό μ°μ΄λ΄λ νμ΄λΌκ³ μ΄ν΄νλ©΄ νΈνλ€.)
//μμ±μ ν¨μλ₯Ό ν΅ν κ°μ²΄ μμ±
function Circle(radius){
this.radius = radius,
this.getDiameter = function(){
return 2 * this.radius;
};
}
const circle1 = new Circle(10); // (λ°μ§λ¦μ΄ 10μΈ Circle κ°μ²΄λ₯Ό μμ±)
const circle2 = new Circle(20); // (λ°μ§λ¦μ΄ 20μΈ Circle κ°μ²΄λ₯Ό μμ±)
console.log(circle1.getDiameter()); // 20
console.log(circle2.getDiameter()); // 40
μμ±μ ν¨μλ μ΄λ¦ κ·Έλλ‘ μΈμ€ν΄μ€λ₯Ό μμ±νλ ν¨μλ€. νμ§λ§ ν΄λμ€ κΈ°λ° κ°μ²΄μ§ν₯ μΈμ΄λ€μ μμ±μμλ λ€λ₯΄κ² κ·Έ νμμ΄ μ ν΄μ Έ μλ κ²μ΄ μλλΌ μΌλ° ν¨μμ λμΌν λ°©λ²μΌλ‘ μμ±μ ν¨μλ₯Ό μ μνκ³ new μ°μ°μμ ν¨κ» νΈμΆνλ©΄ ν΄λΉ ν¨μλ μμ±μ ν¨μλ‘ λμνλ€. λ°λλ‘ new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ₯Ό νΈμΆνμ§ μμΌλ©΄ μμ±μ ν¨μκ° μλλΌ μΌλ° ν¨μλ‘ λμνλ€.
β»κΈ°μ΄κ°λ
- this : κ°μ²΄ μμ μ νλ‘νΌν°λ λ©μλλ₯Ό μ°Έμ‘°νκΈ° μν μκΈ° μ°Έμ‘° λ³μλ€. thisκ° κ°λ¦¬ν€λ κ°μ ν¨μ νΈμΆ λ°©μμ λ°λΌ λμ μΌλ‘ κ²°μ λ¨.
- μΌλ° ν¨μλ‘μ νΈμΆ : μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν΄
- λ©μλλ‘μ νΈμΆ : λ©μλλ₯Ό νΈμΆν κ°μ²΄λ₯Ό κ°λ₯΄ν΄(μ½κ² λ§νλ©΄, ν΄λΉ λ©μλλ₯Ό κ°μ§κ³ μλ κ°μ²΄λ₯Ό κ°λ¦¬ν΄)
- μμ±μ ν¨μλ‘μ νΈμΆ : μμ±μ ν¨μκ° λ―Έλμ μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν΄
17.2.3 μμ±μ ν¨μμ μΈμ€ν΄μ€ μμ± κ³Όμ
μμ±μ ν¨μμ ν¨μ λͺΈμ²΄μμ μνν΄μΌ νλ κ²μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ , μμ±λ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννκ³ μμ±ν μΈμ€ν΄μ€λ₯Ό λ°ννλ€. μμ±μ ν¨μκ° μΈμ€ν΄μ€λ₯Ό μμ±νκ³ λ°ννλ κ²μ νμμ΄κ³ , μμ±λ μΈμ€ν΄μ€μ νλ‘νΌν°λ₯Ό μΆκ°νκ³ μ΄κΈ°κ°μ ν λΉνλ κ²μ μ΅μ μ΄λ€. νμ§λ§ 17.2.2μμ μμ±ν μ½λλ₯Ό 보면 new μ°μ°μλ§ μμλΏ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ λ°ννλ μ½λλ 보μ΄μ§ μλλ€. μλ°μ€ν¬λ¦½νΈ μμ§μ μ묡μ μΈ μ²λ¦¬λ₯Ό ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ λ°ννλ€. μμ±μ ν¨μλ λ€μκ³Ό κ°μ κ³Όμ μ ν΅ν΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
1. μΈμ€ν΄μ€ μμ±κ³Ό this λ°μΈλ©
μ묡μ μΌλ‘ λΉ κ°μ²΄κ° μμ±λλ€. μ΄ λΉ κ°μ²΄κ° μμ±λ κ²μ μλμ§λ§ μμ±μ ν¨μκ° μμ±ν μΈμ€ν΄μ€λ€. κ·Έλ¦¬κ³ μ묡μ μΌλ‘ μμ±λ λΉ μΈμ€ν΄μ€λ thisμ λ°μΈλ©λλ€. μμ±μ ν¨μ λ΄λΆμ thisκ° μμ±μ ν¨μκ° λ―Έλμ μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€λ μ΄μ κ° λ°λ‘ μ΄κ²μ΄λ€. μ΄ μ²λ¦¬λ ν¨μ λͺΈμ²΄μ μ½λκ° ν μ€μ© μ€νλλ λ°νμ μ΄μ μ μ€νλλ€.
function Circle(radius){
console.log(this); // Circle {}
this.radius = radius,
this.getDiameter = function(){
return 2 * this.radius;
};
}
const circle1 = new Circle(10); // (λ°μ§λ¦μ΄ 10μΈ Circle κ°μ²΄λ₯Ό μμ±)
2. μΈμ€ν΄μ€ μ΄κΈ°ν
μμ±μ ν¨μμ κΈ°μ λμ΄ μλ μ½λκ° ν μ€μ© μ€νλμ΄ thisμ λ°μΈλ©λμ΄ μλ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ€. μ¦, μΈμ€ν΄μ€μ νλ‘νΌν°λ λ©μλλ₯Ό μΆκ°νκ³ μμ±μ ν¨μκ° μΈμλ‘ μ λ¬λ°μ μ΄κΈ°κ°μ μΈμ€ν΄μ€ νλ‘νΌν°μ ν λΉνμ¬ μ΄κΈ°ννκ±°λ κ³ μ κ°μ ν λΉνλ€. μ΄λ¬ν μ²λ¦¬λ κ°λ°μκ° κΈ°μ νλ€.
3. μΈμ€ν΄μ€ λ°ν
μμ±μ ν¨μ λ΄λΆμ λͺ¨λ μ²λ¦¬κ° λλλ©΄ μμ±λ μΈμ€ν΄μ€κ° μ묡μ μΌλ‘ λ°νλλ€. μ£Όμν΄μΌ ν μ μ λ§μ½ thisκ° μλ λ€λ₯Έ κ°μ²΄λ₯Ό λͺ μμ μΌλ‘ λ°ννλ©΄ thisκ° λ°νλμ§ λͺ»νκ³ return λ¬Έμ λͺ μν κ°μ²΄κ° λ°νλλ€.
function Circle(radius){
this.radius = radius,
this.getDiameter = function(){
return 2 * this.radius;
};
return {}
}
const circle1 = new Circle(10); // λͺ
μμ μΈ κ°μ²΄ λ°νλ¬ΈμΌλ‘ λΉ κ°μ²΄κ° μμ±λ¨
const circle2 = new Circle(20); // λͺ
μμ μΈ κ°μ²΄ λ°νλ¬ΈμΌλ‘ λΉ κ°μ²΄κ° μμ±λ¨
console.log(circle1); // {}
console.log(circle2); // {}
μ΄μ²λΌ μμ±μ ν¨μ λ΄λΆμμ λͺ μμ μΌλ‘ thisκ° μλ λ€λ₯Έ κ°μ λ°ννλ κ²μ μμ±μ ν¨μμ κΈ°λ³Έ λμμ νΌμνλ―λ‘, μμ±μ ν¨μ λ΄λΆμμ return λ¬Έμ λ°λμ μλ΅ν΄μΌ νλ€.
17.2.4 λ΄λΆ λ©μλ [[Call]]κ³Ό [[Construct]]
ν¨μ μ μΈλ¬Έ λλ ν¨μ ννμμΌλ‘ μ μν ν¨μλ μΌλ°μ μΈ ν¨μλ‘μ νΈμΆν μ μλ κ²μ λ¬Όλ‘ μμ±μ ν¨μλ‘μ νΈμΆν μ μλ€. ν¨μλ κ°μ²΄μ΄λ―λ‘ μΌλ° κ°μ²΄μ λμΌνκ² λμν μ μλ€. ν¨μ κ°μ²΄λ μΌλ° κ°μ²΄κ° κ°μ§κ³ μλ λ΄λΆ μ¬λ‘―κ³Ό λ΄λΆ λ©μλλ₯Ό λͺ¨λ κ°μ§κ³ μκΈ° λλ¬Έμ΄λ€. νμ§λ§ ν¨μλ μΌλ° κ°μ²΄μλ λ€λ₯΄λ€. μΌλ° κ°μ²΄λ νΈμΆν μ μμ§λ§ ν¨μλ νΈμΆν μ μλ€. λ°λΌμ ν¨μλ μΆκ°μ μΌλ‘ λ΄λΆ μ¬λ‘―κ³Ό λ΄λΆ λ©μλλ₯Ό κ°μ§κ³ μλ€. κ·Έ μ€ μμμΌ νλ λ΄λΆ λ©μλλ [[Call]]κ³Ό [[Construct]] λ΄λΆ λ©μλμΈλ°, [[Call]]μ κ°λ ν¨μ κ°μ²΄λ₯Ό callableμ΄λΌ νλ©°, λ΄λΆ λ©μλ [[Construct]]λ₯Ό κ°λ ν¨μ κ°μ²΄λ₯Ό constructorλΌκ³ νλ©°, λ°λλ‘ [[Construct]]λ₯Ό κ°μ§ μλ ν¨μ κ°μ²΄λ₯Ό non-constructorλΌ νλ€. callableμ νΈμΆ ν μ μλ κ°μ²΄ ν¨μλ₯Ό μλ―Ένλ©°, constructorλ μμ±μ ν¨μλ‘μ νΈμΆν μ μλ ν¨μλ₯Ό μλ―Ένλ€. κ²°λ‘ μ μΌλ‘ ν¨μ κ°μ²΄λ λͺ¨λ callableμ΄μ§λ§, λͺ¨λ ν¨μ κ°μ²΄κ° contructorμΈ κ²μ μλλ€. μ½κ² λ§ν΄, λͺ¨λ ν¨μλ μΌλ° ν¨μλ‘ νΈμΆν μ μμ§λ§, λͺ¨λ ν¨μλ₯Ό new μ°μ¬μμ ν¨κ» μμ±μ ν¨μλ‘ νΈμΆν μλ μλ€.
17.2.5 constructorμ non-constructorμ ꡬλΆ
μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μ λ°©μμ λ°λΌ ν¨μλ₯Ό constructorμ non-constructorλ‘ κ΅¬λΆνλ€.
- constructor ν¨μ : ν¨μ μ μΈλ¬Έ, ν¨μ ννμ, ν΄λμ€λ‘ μ μν ν¨μ
- non-constructor ν¨μ : ES6 λ©μλ μΆμ½ νν, νμ΄ν ν¨μλ‘ μ μν ν¨μ (μμ±μ ν¨μλ‘ νΈμΆ λΆκ°λ₯)
λ§μ½, non-constructor ν¨μλ₯Ό new μ°μ°μμ ν¨κ» νΈμΆνλ©΄ TypeErrorκ° λ°μνλ€.
17.2.6 new μ°μ°μ
μΌλ° ν¨μμ μμ±μ ν¨μμ νΉλ³ν νμμ μ°¨μ΄λ μλ€. new μ°μ°μμ ν¨κ» ν¨μλ₯Ό νΈμΆνλ©΄ ν΄λΉ ν¨μλ μμ±μ ν¨μλ‘ λμνλ€. μ¦, ν¨μ κ°μ²΄μ λ΄λΆ λ©μλ [[Construct]]μ΄ νΈμΆλκ³ , λ°λλ‘ new μ°μ¬μ μμ΄ ν¨μλ₯Ό νΈμΆνλ©΄ ν΄λΉ ν¨μλ μΌλ° ν¨μλ‘ λμνλ€. λ€μ λ§ν΄, ν¨μ κ°μ²΄μ λ΄λΆ λ©μλ [[Call]]μ΄ νΈμΆλλ€. μ΄ μ²λΌ μΌλ° ν¨μμ μμ±μ ν¨μμ νΉλ³ν νμμ μ°¨μ΄κ° μκΈ° λλ¬Έμ, μ΄λ₯Ό ꡬλ³νκΈ° μν΄ νμ€μΉΌ μΌμ΄μ€λ‘ μμ±μ ν¨μλ₯Ό λͺ λͺ νλ κ²μ΄ μΌλ°μ μ΄λ€.
'π Language & CS knowledge > JavaScript (λͺ¨λμλ°μ€ν¬λ¦½νΈ Deep Dive)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
19μ₯ νλ‘ν νμ (0) | 2022.07.13 |
---|---|
18μ₯ ν¨μμ μΌκΈ κ°μ²΄ (0) | 2022.07.12 |
16μ₯ νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ (0) | 2022.07.08 |
15μ₯ let, const ν€μλμ λΈλ‘ λ 벨 μ€μ½ν (0) | 2022.07.06 |
14μ₯ μ μ λ³μμ λ¬Έμ μ (0) | 2022.07.04 |