JavaScript Factory Functions with ES6 - Lee-hyuna/33-js-concepts-kr GitHub Wiki
Note : μ΄κ²μ μλ° μ€ν¬λ¦½νΈ ES6+ μ ν¨μ νλ‘κ·Έλλ° λ° ν©μ± μννΈμ¨μ΄ κΈ°μ μ μ²μλΆν° λ°°μ°λ "Composing Software"μ리μ¦(νμ¬ μ±
)μ
μΌλΆμ
λλ€. κ³μ μ§μΌλ΄λΌ. μ΄λ³΄λ€ λ λ§μ κ²μ΄ μμ΅λλ€.!
ν©ν 리 ν¨μλ κ°μ²΄(μλ§λ μλ‘μ΄)λ₯Ό λ°ννλ ν΄λμ€λ μμ±μκ° μλ ν¨μμ
λλ€.
JavaScriptμμλ λͺ¨λ ν¨μκ° κ°μ²΄λ₯Ό λ°ν ν μ μμ΅λλ€. new ν€μλκ° μμΌλ©΄ ν©ν 리 ν¨μμ
λλ€.
ν©ν 리 ν¨μλ JavaScriptμμ νμ 맀λ ₯μ μ΄μμ΅λλ€.
ν΄λμ€μ 볡μ‘μ±κ³Ό μ ν€μλλ‘ λ°μ΄λ€μ΄ κ°μ§ μκ³ λ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μ½κ² μμ± ν μ μκΈ° λλ¬Έμ
λλ€.
JavaScriptλ λ§€μ° νΈλ¦¬ν κ°μ²΄ 리ν°λ΄ ꡬ문μ μ 곡ν©λλ€. λ€μκ³Ό κ°μ΄ 보μ λλ€.
const user = {
userName: 'echo',
avatar: 'echo.png'
};
JavaScriptμ κ°μ²΄ 리ν°λ΄ νκΈ°λ²μ κΈ°λ°ν JSONκ³Ό λ§μ°¬κ°μ§λ‘ :μ μΌμͺ½μ μμ± μ΄λ¦μ΄κ³ μ€λ₯Έμͺ½μ κ°μ
λλ€.
μ νκΈ°λ²μ μ¬μ©νμ¬ propsμ μ‘μΈμ€ ν μ μμ΅λλ€.
console.log(user.userName); // "echo"
λκ΄νΈ νκΈ°λ²μ μ¬μ©νμ¬ κ³μ° λ νΉμ± μ΄λ¦μ μ‘μΈμ€ ν μ μμ΅λλ€.
const key = 'avatar';
console.log( user[key] ); // "echo.png"
μνλ μμ± μ΄λ¦κ³Ό λμΌν μ΄λ¦μ λ²μ λ³μκ°μλ κ²½μ° κ°μ²΄ 리ν°λ΄ λ§λ€κΈ°μμ μ½λ‘ κ³Ό κ°μ μλ΅ ν μ μμ΅λλ€.
const userName = 'echo';
const avatar = 'echo.png';
const user = {
userName,
avatar
};
console.log(user);
// { "avatar": "echo.png", "userName": "echo" }
κ°μ²΄ 리ν°λ΄μ κ°κ²°ν λ©μλ ꡬ문μ μ§μν©λλ€. .setUserName () λ©μλλ₯Ό μΆκ° ν μ μμ΅λλ€.
const userName = 'echo';
const avatar = 'echo.png';
const user = {
userName,
avatar,
setUserName (userName) {
this.userName = userName;
return this;
}
};
console.log(user.setUserName('Foo').userName); // "Foo"
κ°κ²°ν λ©μλμμ, μ΄κ²μ λ©μλκ° νΈμΆλλ μ€λΈμ νΈλ₯Ό μ°Έμ‘°ν©λλ€. κ°μ²΄μ λ©μλλ₯Ό νΈμΆνλ €λ©΄ κ°μ²΄ λνΈ νκΈ°λ²μ μ¬μ©νμ¬
λ©μλμ μ‘μΈμ€νκ³ κ΄νΈλ₯Ό μ¬μ©νμ¬ λ©μλλ₯Ό νΈμΆνλ©΄λ©λλ€. μλ₯Ό λ€μ΄ game.play ()λ .play ()λ₯Ό κ²μ κ°μ²΄μ μ μ©ν©λλ€.
λνΈ νκΈ°λ²μ μ¬μ©νμ¬ λ©μλλ₯Ό μ μ©νλ €λ©΄ ν΄λΉ λ©μλκ° ν΄λΉ μ€λΈμ νΈμ νΉμ±μ΄μ΄μΌν©λλ€.
ν¨μ νλ‘ν νμ
λ©μλ μΈ .call (), .apply () λλ .bind ()λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ μμμ κ°μ²΄μ λ©μλλ₯Ό μ μ© ν μλ μμ΅λλ€.
μ΄ κ²½μ° user.setUserName ( 'Foo')λ .setUserName ()μ μ¬μ©μμκ² μ μ©νλ―λ‘
this === user. .setUserName () λ©μλμμμ΄ λ°μΈλ©μ ν΅ν΄ μ¬μ©μ κ°μ²΄μ .userName μμ±μ λ³κ²½νκ³ λ©μλ 체μΈμ λν΄
λμΌν κ°μ²΄ μΈμ€ν΄μ€λ₯Ό λ°νν©λλ€.
νλμ λν 리ν°λ΄, λ§μ Factories
λ§μ κ°μ²΄λ₯Ό μμ±ν΄μΌνλ κ²½μ° κ°μ²΄ 리ν°λ΄κ³Ό ν©ν 리 ν¨μμ κΈ°λ₯μ κ²°ν©ν΄μΌν©λλ€.
ν©ν 리 ν¨μλ₯Ό μ¬μ©νμ¬ μνλ λ§νΌ λ§μ μ¬μ©μ κ°μ²΄λ₯Ό μμ± ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄ μ±ν
μ±μ λ§λλ κ²½μ° νμ¬ μ¬μ©μλ₯Ό λνλ΄λ μ¬μ©μ κ°μ²΄μ νμ¬ λ‘κ·ΈμΈνκ³ μ±ν
νλ λ€λ₯Έ λͺ¨λ μ¬μ©μλ₯Ό λνλ΄λ λ§μ λ€λ₯Έ μ¬μ©μ κ°μ²΄λ₯Ό κ°μ§ μ μμΌλ―λ‘ μ΄λ¦μ νμ ν μ μμ΅λλ€ μλ°νλ.
μ¬μ©μ κ°μ²΄λ₯Ό createUser () ν©ν λ¦¬λ‘ λ³νν©μλ€.
const createUser = ({ userName, avatar }) => ({
userName,
avatar,
setUserName (userName) {
this.userName = userName;
return this;
}
});
console.log(createUser({ userName: 'echo', avatar: 'echo.png' }));
/*
{
"avatar": "echo.png",
"userName": "echo",
"setUserName": [Function setUserName]
}
*/
λ°νκ°μ²΄
νμ΄ν ν¨μ (=>)λ μμ μ λ°ν νΉμ±μ κ°μ§κ³ μμ΅λλ€. ν¨μ λ³Έλ¬Έμ΄ λ¨μΌ ννμμΌλ‘ ꡬμ±λμ΄ μμΌλ©΄ return ν€μλλ₯Ό μλ΅ ν μ μμ΅λλ€. () => 'foo'λ λ§€κ° λ³μλ₯Ό μ¬μ©νμ§ μκ³ " foo ".
κ°μ²΄ 리ν°λ΄μ λ°ν ν λμ£Όμνμμμ€. κΈ°λ³Έμ μΌλ‘ JavaScriptλ μ€κ΄νΈλ₯Ό μ¬μ©ν λ ν¨μ λ³Έλ¬Έμ λ§λ€λ €κ³ νλ€κ³ κ°μ ν©λλ€.
(μ : {broken : true}). κ°μ²΄ 리ν°λ΄μ λν΄ μμ μ λ°νμ μ¬μ©νλ €λ©΄ κ΄νΈ μμ κ°μ²΄ 리ν°λ΄μ λννμ¬ λͺ
ννκ² ν΄μΌν©λλ€.
const noop = () => { foo: 'bar' };
console.log(noop()); // undefined
const createFoo = () => ({ foo: 'bar' });
console.log(createFoo()); // { foo: "bar" }
첫 λ²μ§Έ μμμ foo :λ λ μ΄λΈλ‘ ν΄μλκ³ barλ ν λΉλκ±°λ λ°νλμ§ μλ ννμμΌλ‘ ν΄μλ©λλ€. μ΄ ν¨μλ undefinedλ₯Ό λ°νν©λλ€.
createFoo () μμ μμ κ΄νΈλ μ€κ΄νΈλ₯Ό ν¨μ λ³Έλ¬Έ λΈλ‘μ΄ μλ νκ°ν ννμμΌλ‘ ν΄μνλλ‘ν©λλ€.
ν΄μ²΄
ν¨μ μκ·Έλμ²μ νΉλ³νμ£Όμλ₯Ό κΈ°μΈμ΄μμμ€.
const createUser = ({ userName, avatar }) => ({
μ΄ μ€μμ μ€κ΄νΈ ({,})λ κ°μ²΄ νκ΄΄λ₯Ό λνλ
λλ€. μ΄ ν¨μλ νλμ μΈμ (κ°μ²΄)λ₯Ό μ¬μ©νμ§λ§ λ¨μΌ μΈμ μΈ userNameκ³Ό μλ°νμμ
λ κ°μ νμ λ§€κ° λ³μλ₯Ό μλ©Έμν΅λλ€. μ΄λ¬ν λ§€κ° λ³μλ ν¨μ λ³Έλ¬Έ λ²μμμ λ³μλ‘ μ¬μ©λ μ μμ΅λλ€. λ°°μ΄μ μλ©Έμν¬ μλ μμ΅λλ€ :
const swap = ([first, second]) => [second, first];
console.log( swap([1, 2]) ); // [2, 1]
λλ¨Έμ§ κ΅¬λ¬Έμ μ¬μ©νμ¬ (... varName) λ°°μ΄ (λλ μΈμ λͺ©λ‘)μμ λλ¨Έμ§ κ°μ μμ§ ν λ€μ ν΄λΉ λ°°μ΄ μμλ₯Ό
λ€μ κ°λ³ μμμ λΆμ°μν¬ μ μμ΅λλ€.
const rotate = ([first, ...rest]) => [...rest, first];
console.log( rotate([1, 2, 3]) ); // [2, 3, 1]
κ³μ° λ μμ± ν€
μ΄μ μ μ°λ¦¬λ μ‘μΈμ€ ν κ°μ²΄ μμ±μ λμ μΌλ‘ κ²°μ νκΈ° μν΄ λκ΄νΈ μ°μ μμ± μ κ·Ό νκΈ°λ²μ μ¬μ©νμ΅λλ€ :
const key = 'avatar';
console.log( user[key] ); // "echo.png"
λ€μμ ν λΉ ν ν€ κ°μ κ³μ°ν μλ μμ΅λλ€.
const arrToObj = ([key, value]) => ({ [key]: value });
console.log( arrToObj([ 'foo', 'bar' ]) ); // { "foo": "bar" }
μ΄ μμ μμ arrToObjλ ν€ / κ° μ (μΌλͺ
νν)λ‘ κ΅¬μ±λ λ°°μ΄μ κ°μ Έ μμ κ°μ²΄λ‘ λ³νν©λλ€.
ν€μ μ΄λ¦μ μμ§ λͺ»νκΈ° λλ¬Έμ κ°μ²΄μ ν€ / κ° μμ μ€μ νλ €λ©΄ μμ± μ΄λ¦μ κ³μ°ν΄μΌν©λλ€.
μ΄λ₯Ό μν΄ κ³μ° λ μμ± μ κ·Όμμμ λκ΄νΈ νκΈ°λ²μ λΉλ € κ°μ²΄ 리ν°λ΄μ μμ±νλ 컨ν
μ€νΈμμ λ€μ μ¬μ©ν©λλ€.
{ [key]: value }
μ±μ°λ μμ μ΄ λλλ©΄, μ°λ¦¬λ κ²°κ΅ λ€μκ³Ό κ°μ μ΅μ’ λμμ μ»κ² λλ€.
{ "foo": "bar" }
κΈ°λ³Έ λ§€κ° λ³μ
JavaScriptμ ν¨μλ κΈ°λ³Έ λ§€κ° λ³μ κ°μ μ§μνλ©° λ€μκ³Ό κ°μ λͺ κ°μ§ μ΄μ μ΄ μμ΅λλ€.
- μ¬μ©μλ μ μ ν κΈ°λ³Έκ°μΌλ‘ λ§€κ° λ³μλ₯Ό μλ΅ ν μ μμ΅λλ€.
- κΈ°λ³Έκ°μ μμλλ μ λ ₯μ μλ₯Ό μ 곡νκΈ° λλ¬Έμ μ΄ ν¨μλ λ μ체μ μΌλ‘ λ¬Έμνλ©λλ€.
- IDEμ μ μ λΆμ λꡬλ κΈ°λ³Έκ°μ μ¬μ©νμ¬ λ§€κ° λ³μμ νμν μ νμ μΆλ‘ ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, κΈ°λ³Έκ° 1μ λ§€κ° λ³μκ° Number μ νμ λ©€λ²λ₯Ό μ¬μ©ν μ μμμ μλ―Έν©λλ€.
κΈ°λ³Έ λ§€κ° λ³μλ₯Ό μ¬μ©νμ¬ createUser ν©ν 리μ λν μμ μΈν°νμ΄μ€λ₯Ό λ¬Έμννκ³ μ¬μ©μ μ λ³΄κ° μ 곡λμ§ μμ κ²½μ°
'μ΅λͺ
'μΈλΆ μ 보λ₯Ό μλμΌλ‘ μ±μλλ€.
const createUser = ({
userName = 'Anonymous',
avatar = 'anon.png'
} = {}) => ({
userName,
avatar
});
console.log(
// { userName: "echo", avatar: 'anon.png' }
createUser({ userName: 'echo' }),
// { userName: "Anonymous", avatar: 'anon.png' }
createUser()
);
ν¨μ μκ·Έλμ²μ λ§μ§λ§ λΆλΆμ μλ§λ μ½κ° μ°μ΅κ² λ³΄μΌ κ²μ λλ€.
} = {}) => ({
μλͺ
μ΄ λ«νκΈ° μ§μ μ λ§μ§λ§ = {} λΉνΈλμ΄ λ§€κ° λ³μμ μ무κ²λ μ λ¬λμ§ μμΌλ©΄ λΉ κ°μ²΄λ₯Ό κΈ°λ³Έκ°μΌλ‘ μ¬μ©νλ€λ κ²μ μλ―Έν©λλ€.
λΉ κ°μ²΄μμ κ°μ μ κ±°νλ €κ³ νλ©΄ μμ±μ λν κΈ°λ³Έκ°μ΄ μλμΌλ‘ μ¬μ©λ©λλ€. κΈ°λ³Έ κ°μ λ€μκ³Ό κ°μ΅λλ€.
undefinedλ₯Ό 미리 μ μ λ κ°μΌλ‘ λ°κΎΈμμμ€.
= {} κΈ°λ³Έκ°μ΄ μμΌλ©΄ undefinedμμ μμ±μ μ‘μΈμ€ ν μ μκΈ° λλ¬Έμ μΈμκ°μλ createUser()κ° μ€λ₯λ₯Ό λ°μμν΅λλ€.
Type Inference
JavaScriptλ μ΄ κΈμ μ°λ λμ λ€μ΄ν°λΈ νμ
μ£Όμμ κ°μ§κ³ μμ§ μμ§λ§ JSDoc (λ λμ μ΅μ
μ μΆνμΌλ‘ μΈν΄ κ°μ),
νμ΄μ€ λΆμ νλ‘μ° λ° λ§μ΄ν¬λ‘ μννΈμ νμ
μ€ν¬λ¦½νΈλ₯Ό ν¬ν¨νμ¬ λͺ κ°μ§ κ²½μ ν¬λ§·μ΄ κ·Έ 격차λ₯Ό ν΄μνκΈ° μν΄ μλ
κ° κΈμ±μ₯ ν΄ μμ΅λλ€.
λλ rtypeμ λ¬Έμνμ μ¬μ©νλ€ - κΈ°λ₯μ νλ‘κ·Έλλ°μμν TypeScriptλ³΄λ€ ν¨μ¬ λ μ½κΈ° μ¬μ΄ νκΈ°λ².
μ΄ κΈμ μ°λ μμ μλ μ ν μ£Όμμ λν΄ νμ€ν μΉμκ° μμ΅λλ€.
JavaScript μ¬μμλ λ³λ€λ₯Έ λμμ΄ μμΌλ©° λͺ¨λ κΈ°λ₯μ λͺ
νν λ¨μ μ΄μλ κ²μΌλ‘ 보μ
λλ€.
μ ν μ μΆλ μ¬μ© λ λ¬Έλ§₯μ κΈ°λ°μΌλ‘ μ μΆ μ νμ μΆλ‘ νλ νλ‘μΈμ€μ λλ€. μλ° μ€ν¬λ¦½νΈμμλ μ£Όμμ μ λ ₯νλ μ’μ λμμ λλ€.
νμ€ JavaScript ν¨μμμ μΆλ‘ μ μν λ¨μλ₯Ό μΆ©λΆν μ 곡νλ€λ©΄ λΉμ©μ΄λ μνμ΄ μλ μ ν μ£Όμμ μ΄μ λλΆλΆμ μ»μ μ μμ΅λλ€.
TypeScript λλ Flowμ κ°μ λꡬλ₯Ό μ¬μ©νκΈ°λ‘ κ²°μ ν κ²½μ°μλ μ ν μ μΆλ‘ κ°λ₯ν ν λ§μ΄ μννκ³ μ ν μ μΆκ° λΆμ‘±ν μν©μμ
μ ν μ£Όμμ μ μ₯ν΄μΌν©λλ€. μλ₯Ό λ€μ΄ 곡μ μΈν°νμ΄μ€λ₯Ό μ§μ νλ μλ° μ€ν¬λ¦½νΈμλ κΈ°λ³Έ λ°©λ²μ΄ μμ΅λλ€.
μ΄λ TypeScript λλ rtypeμμ μ½κ³ μ μ©ν©λλ€.
Tern.jsλ λ§μ μ½λ νΈμ§κΈ°μ IDE μ© νλ¬κ·ΈμΈμ΄μλ JavaScript μ© μ μΆν μ μΆ λꡬμ λλ€.
Microsoftμ Visual Studio μ½λλ TypeScriptμ μ ν μ μΆ κΈ°λ₯μ μΌλ° JavaScript μ½λλ‘ κ°μ Έ μ€κΈ° λλ¬Έμ Ternμ΄ νμνμ§ μμ΅λλ€.
JavaScriptμμ ν¨μμ κΈ°λ³Έ λ§€κ° λ³μλ₯Ό μ§μ νλ©΄ Tern.js, TypeScript λ° Flowμ κ°μ μ ν μ μΆκ° κ°λ₯ν λꡬλ μ¬λ°λ₯΄κ² μμ μ€μΈ APIλ₯Ό μ¬μ©ν μ μλλ‘ IDE ννΈλ₯Ό μ 곡ν©λλ€.
λν΄νΈκ° μλ€λ©΄, IDEλ μμλλ λ§€κ° λ³μ μ νμ νμ νκΈ°μν μΆ©λΆν ννΈλ₯Ό κ°μ§κ³ μμ§ μμ΅λλ€.
κΈ°λ³Έκ°μ μ¬μ©νλ©΄ IDE (μ : μ¬λ)κ° μμ μμ μ μΆ ν μ μμ΅λλ€.
λ§€κ° λ³μλ₯Ό κ³ μ μ νμΌλ‘ μ ννλ κ²μ΄ μλ―Έκ°μλ κ²μ μλλλ€(μΌλ° ν¨μμ κ³ μ°¨ ν¨μλ₯Ό μ΄λ ΅κ² λ§λλλ€). νμ§λ§ μ΄ν΄κ°λλ©΄ κΈ°λ³Έ λ§€κ° λ³μκ° κ°μ₯ μ’μ λ°©λ²μ λλ€. TypeScript λλ Flowλ₯Ό μ¬μ©ν©λλ€.
Mixin ν©μ±μ μν ν©ν 리 ν¨μλ€
ν©ν 리λ λ©μ§ νΈμΆ APIλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό ν¬λν¬ μμνλλ° μ ν©ν©λλ€.
μΌλ°μ μΌλ‘ νμν κ²μ μ λΆμ΄μ§λ§, ν λ²μ μ¬λ¬ μ νμ κ°μ²΄μ λΉμ·ν κΈ°λ₯μ ꡬννλ κ²½μ°κ° μμ΅λλ€.
μ΄λ¬ν κΈ°λ₯μ κΈ°λ₯ λ―Ήμ€λ‘ μΆμννμ¬ λ³΄λ€ μ½κ² ββμ¬μ¬μ© ν μ μμ΅λλ€.
κ·Έκ²μ΄ κΈ°λ₯ λ―Ήμ€κ° λΉλλ κ³³μ λλ€. λͺ¨λ κ°μ²΄ μΈμ€ν΄μ€μ .constructor μμ±μ μΆκ°νλ €λ©΄ withConstructor λ―Ήμ€ μΈμ λΉλνμμμ€.
with-constructor.js:
const withConstructor = constructor => o => ({
// create the delegate [Prototype](/Lee-hyuna/33-js-concepts-kr/wiki/Prototype)
__proto__: {
// add the constructor prop to the new [Prototype](/Lee-hyuna/33-js-concepts-kr/wiki/Prototype)
constructor
},
// mix all o's props into the new object
...o
});
μ΄μ κ°μ Έ μμ λ€λ₯Έ λ―Ήμ€μ ν¨κ» μ¬μ©ν μ μμ΅λλ€.
import withConstructor from `./with-constructor';
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
// or `import pipe from 'lodash/fp/flow';`
// Set up some functional mixins
const withFlying = o => {
let isFlying = false;
return {
...o,
fly () {
isFlying = true;
return this;
},
land () {
isFlying = false;
return this;
},
isFlying: () => isFlying
}
};
const withBattery = ({ capacity }) => o => {
let percentCharged = 100;
return {
...o,
draw (percent) {
const remaining = percentCharged - percent;
percentCharged = remaining > 0 ? remaining : 0;
return this;
},
getCharge: () => percentCharged,
getCapacity: () => capacity
};
};
const createDrone = ({ capacity = '3000mAh' }) => pipe(
withFlying,
withBattery({ capacity }),
withConstructor(createDrone)
)({});
const myDrone = createDrone({ capacity: '5500mAh' });
console.log(`
can fly: ${ myDrone.fly().isFlying() === true }
can land: ${ myDrone.land().isFlying() === false }
battery capacity: ${ myDrone.getCapacity() }
battery status: ${ myDrone.draw(50).getCharge() }%
battery drained: ${ myDrone.draw(75).getCharge() }% remaining
`);
console.log(`
constructor linked: ${ myDrone.constructor === createDrone }
`);
보μλ€μνΌ μ¬μ¬μ© κ°λ₯ν withConstructor() λ―Ήμ€μΈμ λ€λ₯Έ λ―Ήμ€μΈκ³Ό ν¨κ» νμ΄ν λΌμΈμΌλ‘ κ°λ¨ν λλ‘ λ©λλ€.
withBattery()λ λ‘λ΄, μ κΈ° μ€μΌμ΄νΈ 보λ λλ ν΄λμ© μ₯μΉ μΆ©μ κΈ°μ κ°μ λ€λ₯Έ μ’
λ₯μ κ°μ²΄μ ν¨κ» μ¬μ©ν μ μμ΅λλ€.
withFlying()μ λΉνμ€μΈ μλμ°¨, λ‘μΌ λλ νμ μ λͺ¨λΈλ§νλ λ° μ¬μ©λ μ μμ΅λλ€.
μ»΄ν¬μ§μ
μ μ½λμ νΉμ κΈ°μ λ³΄λ€ μ¬κ³ λ°©μμ κ°κΉμ΅λλ€. λΉμ μ μ¬λ¬ κ°μ§ λ°©λ²μΌλ‘ κ·Έκ²μ μ±μ·¨ ν μ μμ΅λλ€.
ν¨μ μμ±μ μ²μλΆν° λ€μ λΉλνλ κ²μ΄ κ°μ₯ μ¬μ΄ λ°©λ²μ΄λ©°, ν©ν 리 ν¨μλ ꡬν μΈλΆ μ¬νμ μΉμν APIλ₯Ό κ°λ¨νκ² λννλ κ°λ¨ν λ°©λ²μ
λλ€.
κ²°λ‘
ES6μ κ°μ²΄ μμ± λ° ν©ν 리 κΈ°λ₯μ μ²λ¦¬νκΈ°μν νΈλ¦¬ν ꡬ문μ μ 곡ν©λλ€.
λλΆλΆ λΉμ μ΄ νμλ‘νλ κ²μ μ λΆμ§λ§, JavaScriptμ΄κΈ° λλ¬Έμ μλ°μ κ°μ λλμ μ£Όλ λ λ€λ₯Έ μ κ·Ό λ°©μμ΄ μμ΅λλ€ : class ν€μλ.
JavaScriptμμ ν΄λμ€λ 곡μ₯λ³΄λ€ λ μ₯ν©νκ³ μ νμ μ΄λ©° 리ν©ν λ§μ μμ΄μλ μ½κ°μ μ§λ’°λ°μ΄μ§λ§
Reactμ Angularμ κ°μ μ£Όμ νλ‘ νΈμλ νλ μ μν¬μ μν΄ μμ©λμ΄ μμΌλ©° λͺ κ°μ§ λλ¬Έ μ©λκ° μμ΅λλ€. 볡μ‘μ±μ κ°μΉμκ² λ§λλ κ²½μ°.
"λλ‘λ μ°μν ꡬνμ λ¨μ§ ν¨μ μΌ λΏμ΄μ§, λ©μλκ° μλλΌ ν΄λμ€κ° μλλΌ νλ μ μν¬κ° μλλΌ ν¨μ μΌλΏμ
λλ€."~ John Carmack
κ°μ₯ κ°λ¨ν ꡬνμΌλ‘ μμνκ³ νμν κ²½μ°μλ§ λ³΄λ€ λ³΅μ‘ν ꡬνμΌλ‘ μ΄λνμμμ€.