μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |
- useEffect
- μλ°μ€ν¬λ¦½νΈ
- history api
- Flex
- fetch API
- λ°λΈμ½μ€
- μ½λ©ν μ€νΈ
- REACT
- λ°λΈμ½μ€3κΈ°
- position
- useRef
- νλ‘κ·Έλλ¨Έμ€
- μκ³ λ¦¬μ¦
- CSS
- λΈλ‘κ·Έ
- Gatsby
- νλ‘ νΈμλ
- Props
- float
- Today
- Total
Daehyunii's Dev-blog
26μ₯ ES6 ν¨μμ μΆκ° κΈ°λ₯ λ³Έλ¬Έ
26μ₯ ES6 ν¨μμ μΆκ° κΈ°λ₯
Daehyunii 2022. 7. 26. 19:5326.1 ν¨μμ ꡬλΆ
ES6 μ΄μ κΉμ§ μλ°μ€ν¬λ¦½νΈμ ν¨μλ λ³λ€λ₯Έ κ΅¬λΆ μμ΄ λ€μν λͺ©μ μΌλ‘ μ¬μ©λμλ€. μ¦, μλ°μ€ν¬λ¦½νΈμ ν¨μλ μΌλ°μ μΈ ν¨μλ‘μ νΈμΆν μλ μκ³ , new μ°μ°μμ ν¨κ» νΈμΆνμ¬ μμ±μ ν¨μλ‘μ νΈμΆν μλ μμΌλ©°, κ°μ²΄μ λ°μΈλ©λμ΄ λ©μλλ‘μ νΈμΆν μλ μλ€.
var foo = function (){
return 1;
}
// μΌλ° ν¨μλ‘μ νΈμΆ
foo(); // 1 λ°ν
// μμ±μ ν¨μλ‘μ νΈμΆ
new foo(); // foo {} μμ±
// λ©μλλ‘μ νΈμΆ
var obj = { foo : foo };
obj.foo(); // 1 λ°ν
μ΄μ²λΌ ES6 μ΄μ μ ν¨μλ μ¬μ© λͺ©μ μ λ°λΌ λͺ νν ꡬλΆλμ§ μλλ€. λ€μ λ§ν΄, ES6 μ΄μ μ λͺ¨λ ν¨μλ callable μ΄λ©΄μ constructorλ€. μ£Όμν κ²μ ES6 μ΄μ μ μΌλ°μ μΌλ‘ λ©μλλΌκ³ λΆλ₯΄λ κ°μ²΄μ λ°μΈλ©λ ν¨μλ callableμ΄λ©° constructor λΌλ κ²μ΄λ€. λ°λΌμ κ°μ²΄μ λ°μΈλ©λ ν¨μλ μΌλ° ν¨μλ‘μ νΈμΆν μ μλ κ²μ λ¬Όλ‘ μμ±μ ν¨μλ‘μ νΈμΆν μλ μλ€.
var obj = {
x : 10,
f : function (){
return this.x;
}
};
// νλ‘νΌν° fμ λ°μΈλ©λ ν¨μλ₯Ό λ©μλλ‘μ νΈμΆ
console.log(obj.f()); // 10
// νλ‘νΌν° fμ λ°μΈλ©λ ν¨μλ₯Ό μΌλ° ν¨μλ‘μ νΈμΆ
var bar = obj.f;
console.log(bar()); // undefined
// νλ‘νΌν° fμ λ°μΈλ©λ ν¨μλ₯Ό μμ±μ ν¨μλ‘μ νΈμΆ
console.log(new obj.f()); // f{}
μ΄μ²λΌ ES6 μ΄μ μ λͺ¨λ ν¨μλ μ¬μ© λͺ©μ μ λ°λΌ λͺ νν ꡬλΆμ΄ μμΌλ―λ‘ νΈμΆ λ°©μμ νΉλ³ν μ μ½μ΄ μκ³ μμ±μ ν¨μλ‘ νΈμΆλμ§ μμλ νλ‘ν νμ κ°μ²΄λ₯Ό μμ±νλ€. μ΄λ μ€μλ₯Ό μ λ°ν κ°λ₯μ±μ΄ μκ³ μ±λ₯λ©΄μμλ μ’μ§ μλ€. μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ ES6μμλ ν¨μλ₯Ό μ¬μ© λͺ©μ μ λ°λΌ μΈ κ°μ§ μ’ λ₯λ‘ λͺ νν ꡬλΆνλ€.
ES6 ν¨μμ κ΅¬λΆ | constructor | prototype | super | arguments |
μΌλ° ν¨μ | o | o | x | o |
λ©μλ(μΆμ½ νν) | x | x | o | o |
νμ΄ν ν¨μ | x | x | x | x |
μΌλ° ν¨μλ constructro μ΄μ§λ§ ES6μ λ©μλμ νμ΄ν ν¨μλ non-constructorμ΄λ€.
26.2 λ©μλ
ES6 μ΄μ μ¬μμλ λ©μλμ λν λͺ νν μ μκ° μμλ€. μΌλ°μ μΌλ‘ λ©μλλ κ°μ²΄μ λ°μΈλ©λ ν¨μλ₯Ό μΌμ»«λ μλ―Έλ‘ μ¬μ©λμλ€. ES6 μ¬μμμλ λ©μλμ λν μ μκ° λͺ ννκ² κ·μ λμλ€. ES6 μ¬μμμ λ©μλλ λ©μλ μΆμ½ ννμΌλ‘ μ μλ ν¨μλ§μ μλ―Ένλ€.
var obj = {
x : 10,
// fμ λ°μΈλ©λ ν¨μλ λ©μλκ° μλ μΌλ° ν¨μλ€.
f : function (){
},
// fooλ λ©μλλ€.
foo(){
}
};
ES6 λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμΌλ―λ‘ prototype νλ‘νΌν°κ° μκ³ νλ‘ν νμ λ μμ±νμ§ μλλ€. μ°Έκ³ λ‘ νμ€ λΉνΈμΈ κ°μ²΄κ° μ 곡νλ νλ‘ν νμ λ©μλμ μ μ λ©μλλ λͺ¨λ non-constructorλ€. ES6 λ©μλλ μμ μ λ°μΈλ©ν κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ΄λΆ μ¬λ‘― [[HomeObject]]λ₯Ό κ°λλ€. super μ°Έμ‘°λ λ΄λΆ μ¬λ‘― [[HomeObject]]λ₯Ό μ¬μ©νμ¬ μνΌν΄λμ€μ λ©μλλ₯Ό μ°Έμ‘°νλ―λ‘ λ΄λΆ μ¬λ‘― [[HomeObject]]λ₯Ό κ°λ ES6 λ©μλλ super ν€μλλ₯Ό μ¬μ©ν μ μλ€. μ΄μ²λΌ ES6 λ©μλλ λ³Έμ°μ κΈ°λ₯μ μΆκ°νκ³ μλ―Έμ μΌλ‘ λ§μ§ μλ κΈ°λ₯μ μ κ±°νλ€. λ°λΌμ λ©μλλ₯Ό μ μν λ νλ‘νΌν° κ°μΌλ‘ μ΅λͺ ν¨μ ννμμ ν λΉνλ ES6 μ΄μ μ λ°©μμ μ§μν΄μΌ νλ€.
26.3 νμ΄ν ν¨μ
νμ΄ν ν¨μλ function ν€μλ λμ νμ΄ν( => )λ₯Ό μ¬μ©νμ¬ κΈ°μ‘΄μ ν¨μ μ μ λ°©μλ³΄λ€ κ°λ΅νκ² ν¨μλ₯Ό μ μν μ μλ€. νμ΄ν ν¨μλ ννλ§ κ°λ΅ν κ²μ΄ μλλΌ λ΄λΆ λμλ κΈ°μ‘΄μ ν¨μλ³΄λ€ κ°λ΅νλ€. νΉν νμ΄ν ν¨μλ μ½λ°± ν¨μ λ΄λΆμμ thisκ° μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λμμΌλ‘ μ μ©νλ€.
26.3.1 νμ΄ν ν¨μ μ μ
1. ν¨μ μ μ
νμ΄ν ν¨μλ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν μ μκ³ ν¨μ ννμμΌλ‘ μ μν΄μΌ νλ€.
const multifly = (x,y) => x * y;
console.log(multifly(2, 3)); // 6
2. 맀κ°λ³μ μ μΈ
맀배견μκ° μ¬λ¬ κ°μΈ κ²½μ° μκ΄νΈ( ) μμ 맀κ°λ³μλ₯Ό μ μΈνλ€. 맀κ°λ³μκ° ν κ°μΈ κ²½μ° μκ΄νΈ ( )λ₯Ό μλ΅ν μ μλ€.
const multifly = x => x ** 2;
console.log(multifly(2)); // 4
3. ν¨μ λͺΈμ²΄ μ μ
ν¨μ λͺΈμ²΄κ° νλμ λ¬ΈμΌλ‘ ꡬμ±λλ€λ©΄ ν¨μ λͺΈμ²΄λ₯Ό κ°μΈλ μ€κ΄νΈ { }λ₯Ό μλ΅ν μ μλ€. μ΄λ ν¨μ λͺΈμ²΄ λ΄λΆμ λ¬Έμ΄ κ°μΌλ‘ νκ°λ μ μλ ννμμΈ λ¬Έμ΄λΌλ©΄ μ묡μ μΌλ‘ λ°ννλ€. λ§μ½ ν¨μ λͺΈμ²΄λ₯Ό κ°μΈλ μ€κ΄νΈ { }λ₯Ό μλ΅ν κ²½μ° ν¨μ λͺΈμ²΄ λ΄λΆμ λ¬Έμ΄ ννμμ΄ μλ λ¬Έμ΄λΌλ©΄ μλ¬κ° λ°μνλ€. ννμμ΄ μλ λ¬Έμ λ°νν μ μκΈ° λλ¬Έμ΄λ€. λ°λΌμ ν¨μ λͺΈμ²΄κ° νλμ λ¬ΈμΌλ‘ ꡬμ±λλ€ ν΄λ ν¨μ λͺΈμ²΄μ λ¬Έμ΄ ννμμ΄ μλ λ¬Έμ΄λΌλ©΄ μ€κ΄νΈλ₯Ό μλ΅ν μ μλ€.
const sum = (a, b) => {
const result = a + b;
return result;
};
λ§μ½ νμ΄ν ν¨μκ° κ°μ²΄ 리ν°λ΄μ λ°ννλ κ²½μ° κ°μ²΄ 리ν°λ΄μ μκ΄νΈ ( )λ‘ κ°μΈ μ£Όμ΄μΌ νλ€.(κ°μΈμ§ μμΌλ©΄ ν¨μ λͺΈμ²΄λ₯Ό κ°μΈλ μ½λλΈλ‘μΌλ‘ μλͺ»ν΄μνκΈ° λλ¬Έ) ν¨μ λͺΈμ²΄κ° μ¬λ¬ κ°μ λ¬ΈμΌλ‘ ꡬμ±λλ€λ©΄ ν¨μ λͺΈμ²΄λ₯Ό κ°μΈλ μ€κ΄νΈ { }λ₯Ό μλ΅ν μ μκ³ λ°νκ°μ΄ μλ€λ©΄ λͺ μμ μΌλ‘ λ°νν΄μΌ νλ€. λν νμ΄ν ν¨μλ μ¦μ μ€ν ν¨μλ‘ μ¬μ©ν μ μμΌλ©°, μ½λ°± ν¨μλ‘μ μ μν λ μ μ©νλ€.(μ½λ°± ν¨μ λ΄μ this λ¬Έμ λ₯Ό ν΄κ²°νλ λμμΌλ‘ λ§μ΄ μ¬μ©λ¨)
26.3.2 νμ΄ν ν¨μμ μΌλ° ν¨μμ μ°¨μ΄
1. νμ΄ν ν¨μλ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ non-constructorλ€.
2. μ€λ³΅λ 맀κ°λ³μ μ΄λ¦μ μ μΈν μ μλ€.(μΌλ° ν¨μλ μ€λ³΅λ 맀κ°λ³μ μ΄λ¦μ μ μΈν΄λ μλ¬κ° λ°μνμ§ μλλ€.)
3. νμ΄ν ν¨μλ ν¨μ μ체μ this, arguments, super, new.target λ°μΈλ©μ κ°μ§ μλλ€.
26.3.3 this
νμ΄ν ν¨μκ° μΌλ° ν¨μμ ꡬλ³λλ κ°μ₯ ν° νΉμ§μ΄ λ°λ‘ thisλ€. κ·Έλ¦¬κ³ νμ΄ν ν¨μλ λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬λμ΄ μ½λ°± ν¨μλ‘ μ¬μ©λλ κ²½μ°κ° λ§λ€. this λ°μΈλ©μ ν¨μκ° μ΄λ»κ² νΈμΆλλμ§μ λ°λΌ λμ μΌλ‘ κ²°μ λλ€. κ·Έλ κΈ° λλ¬Έμ μΌλ° ν¨μλ‘μ νΈμΆλλ μ½λ°± ν¨μμ κ²½μ° λ¬Έμ κ° λ°μνλ€. μ΄λ¬ν λ¬Έμ λ νμ΄ν ν¨μλ₯Ό μ¬μ©νμ¬ ν΄κ²°ν μ μλ€. νμ΄ν ν¨μλ ν¨μ μ체μ this λ°μΈλ©μ κ°μ§ μλλ€. λ°λΌμ νμ΄ν ν¨μ λ΄λΆμμ thisλ₯Ό μ°Έμ‘°νλ©΄ μμ μ€μ½νμ thisλ₯Ό κ·Έλλ‘ μ°Έμ‘°νλ€. μ΄λ₯Ό lexical thisλΌ νλ€. μ΄λ λ§μΉ λ μ컬 μ€μ½νμ κ°μ΄ νμ΄ν ν¨μμ thisκ° ν¨μκ° μ μλ μμΉμ μν΄ κ²°μ λλ κ²κ³Ό κ°κΈ° λλ¬Έμ΄λ€.
νμ΄ν ν¨μλ₯Ό μ μΈν λͺ¨λ ν¨μμλ this λ°μΈλ©μ΄ λ°λμ μ‘΄μ¬νλ€. λ°λΌμ ES6μμ νμ΄ν ν¨μκ° λμ λκΈ° μ΄μ μλ μΌλ°μ μΈ μλ³μμ²λΌ μ€μ½ν 체μΈμ ν΅ν΄ thisλ₯Ό νμν νμκ° μμλ€. νμ§λ§ νμ΄ν ν¨μλ ν¨μ μ체μ thisλ°μΈλ©μ΄ μ‘΄μ¬νμ§ μλλ€. λ°λΌμ νμ΄ν ν¨μ λ΄λΆμμ thisλ₯Ό μ°Έμ‘°νλ©΄ μΌλ°μ μΈ μλ³μμ²λΌ μ€μ½ν 체μΈμ ν΅ν΄ μμ μ€μ½νμμ thisλ₯Ό νμνλ€. λ§μ½ νμ΄ν ν¨μμ νμ΄ν ν¨μκ° μ€μ²©λμ΄ μλ€λ©΄ μμ νμ΄ν ν¨μμλ this λ°μΈλ©μ΄ μμΌλ―λ‘ μ€μ½νμ²΄μΈ μμμ κ°μ₯ κ°κΉμ΄ μμ ν¨μ μ€μμ νμ΄ν ν¨μκ° μλ ν¨μμ thisλ₯Ό μ°Έμ‘°νλ€. νλ‘νΌν°μ ν λΉν νμ΄ν ν¨μλ μ€μ½ν μ²΄μΈ μμμ κ°μ₯ κ°κΉμ΄ μμ ν¨μ μ€μμ νμ΄ν ν¨μκ° μλ ν¨μμ thisλ₯Ό μ°Έμ‘°νλ€.
const counter = {
num : 1,
increase : () => ++this.num
};
console.log(counter.increase()); // NaN
// increase νλ‘νΌν°μ ν λΉν νμ΄ν ν¨μμ μμ μ€μ½νλ μ μμ΄λ€.
// λ°λΌμ increase νλ‘νΌν°μ ν λΉν νμ΄ν ν¨μμ thisλ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
26.3.5 arguments
νμ΄ν ν¨μλ ν¨μ μ체μ arguments λ°μΈλ©μ κ°μ§ μλλ€. λ°λΌμ νμ΄ν ν¨μ λ΄λΆμμ argumentsλ₯Ό μ°Έμ‘°νλ©΄ thisμ λ§μ°¬κ°μ§λ‘ μμ μ€μ½νμ argumentsλ₯Ό μ°Έμ‘°νλ€. arguments κ°μ²΄λ ν¨μλ₯Ό μ μν λ 맀κ°λ³μμ κ°μλ₯Ό νμ ν μ μλ κ°λ³ μΈμ ν¨μλ₯Ό ꡬνν λ μ μ©νλ€. νμ§λ§ νμ΄ν ν¨μμλ arguments κ°μ²΄λ₯Ό μ¬μ©ν μ μμΌλ―λ‘ νμ΄ν ν¨μλ‘ κ°λ³ μΈμ ν¨μλ₯Ό ꡬνν΄μΌ ν λλ λ°λμ Rest νλΌλ―Έν°λ₯Ό μ¬μ©ν΄μΌ νλ€.
26.4 Rest νλΌλ―Έν°
26.4.1 κΈ°λ³Έ λ¬Έλ²
Rest νλΌλ―Έν°(λλ¨Έμ§ λ§€κ°λ³μ)λ 맀κ°λ³μ μ΄λ¦ μμ ...μ λΆμ¬μ μ μν 맀κ°λ³μλ₯Ό μλ―Ένλ€. RestνλΌλ―Έν°λ ν¨μμ μ λ¬λ μΈμλ€μ λͺ©λ‘μ λ°°μ΄λ‘ μ λ¬λ°λλ€.
function foo(...rest){
console.log(rest);
}
foo(1,2,3,4,5); // [1, 2, 3, 4, 5]
μΌλ° 맀κ°λ³μμ Rest νλΌλ―Έν°λ ν¨κ» μ¬μ©ν μ μλ€. μ΄λ ν¨μμ μ λ¬λ μΈμλ€μ 맀κ°λ³μμ Rest νλΌλ―Έν°μ μμ°¨μ μΌλ‘ ν λΉλλ€.
function foo(x, ...rest){
console.log(x, rest);
}
foo(1,2,3,4,5); // 1 [2, 3, 4, 5]
Rest νλΌλ―Έν°λ λ¨Όμ μ μΈλ 맀κ°λ³μμ ν λΉλ μΈμλ₯Ό μ μΈν λλ¨Έμ§ μΈμλ€λ‘ ꡬμ±λ λ°°μ΄μ΄ ν λΉλλ―λ‘, λ°λμ λ§μ§λ§ νλΌλ―Έν°μ΄μ΄μΌ νλ€. λν Rest νλΌλ―Έν°λ λ¨ νλλ§ μ μΈν μ μλ€. Rest νλΌλ―Έν°λ ν¨μ μ μ μ μ μΈν 맀κ°λ³μ κ°μλ₯Ό λνλ΄λ ν¨μ κ°μ²΄μ length νλ‘νΌν°μ μν₯μ μ£Όμ§ μλλ€.(μ¦ λ§€κ°λ³μ κ°μμ μΉ΄μ΄νΈλμ§ μμ)
function foo(x, ...rest){
console.log(x, rest);
}
foo(1,2,3,4,5); // 1 [2, 3, 4, 5]
console.log(foo.length); // 1
26.5 맀κ°λ³μ κΈ°λ³Έκ°
ν¨μλ₯Ό νΈμΆν λ 맀κ°λ³μμ κ°μλ§νΌ μΈμλ₯Ό μ λ¬ν΄μΌ νμ§λ§ κ·Έλ μ§ μμ κ²½μ°μλ μλ¬λ λ°μνμ§ μλλ€. μ΄λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ 맀κ°λ³μμ κ°μμ μΈμμ κ°μλ₯Ό 체ν¬νμ§ μκΈ° λλ¬Έμ΄λ€. μΈμκ° μ λ¬λμ§ μμ 맀κ°λ³μμ κ°μ undefinedλ€. μ΄λ¬ν κ²½μ° λ¬Έμ κ° λ°μν μ μκΈ° λλ¬Έμ λ°©μ΄ μ½λκ° νμνλ€. ES6μμλ 맀κ°λ³μ κΈ°λ³Έκ°μ μ¬μ©νμ¬ λ¬Έμ λ°μμ λ°©μ΄ν μ μλ€.
function name(name = 'lee'){
console.log(name);
}
name(); // lee
name(undefined) // lee
name(null) // null
name('park') // park
맀κ°λ³μ κΈ°λ³Έκ°μ 맀κ°λ³μμ μΈμλ₯Ό μ λ¬νμ§ μμ κ²½μ°μ undefinedλ₯Ό μ λ¬ν κ²½μ°μλ§ μ ν¨νλ€. μμμ μ΄ν΄λ³Έ Rest νλΌλ―Έν°μλ κΈ°λ³Έκ°μ μ§μ ν μ μλ€.(SyntaxError λ°μ) κ·Έλ¦¬κ³ λ§€κ°λ³μ κΈ°λ³Έκ°μ ν¨μ μ μ μ μ μΈν 맀κ°λ³μ κ°μλ₯Ό λνλ΄λ ν¨μ κ°μ²΄μ length νλ‘νΌν°μ arguments κ°μ²΄μ μλ¬΄λ° μν₯μ μ£Όμ§ μλλ€.
function add(x, y = 0){
console.log(arguments);
}
console.log(add.length); // 1
add(1); // Arguments { '0' : 1 }
add(1,2); // Arguments { '0' : 1, '1' : 2 }
'π Language & CS knowledge > JavaScript (λͺ¨λμλ°μ€ν¬λ¦½νΈ Deep Dive)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
28μ₯ Number (0) | 2022.07.27 |
---|---|
27μ₯ λ°°μ΄ (0) | 2022.07.27 |
25μ₯ ν΄λμ€ (0) | 2022.07.26 |
24μ₯ ν΄λ‘μ (0) | 2022.07.22 |
23μ₯ μ€ν 컨ν μ€νΈ (0) | 2022.07.20 |