-
[JavaScript/ES6] Arrow(ํ์ดํ) ํจ์ - ๊ตฌ๋ฌธํธjavascript 2019. 5. 10. 18:34
์๋ ํ์ธ์, Jerry์ ๋๋ค.
์ด๋ฒ ํฌ์คํ ์ arrow function(ํ์ดํ ํจ์)์ ๋ํด์ ์์ฑํ๋ ค๊ณ ํฉ๋๋ค. arrow function(ํ์ดํ ํจ์)์ ๊ฒฝ์ฐ ์ธ๊ธํ ๊ฒ ๋ง์์ 2ํธ ํน์ 3ํธ์ผ๋ก ๋๋ ์ ํฌ์คํ ํ ๊ฒ ๊ฐ์ต๋๋ค.
ECMAScript 6(์ ์, ๊น์๋ณด) ์ฑ ์ ๋ด์ฉ๊ณผ MDN์ ๋ด์ฉ์ ์ฐธ๊ณ ํ์์ต๋๋ค.
ํ์ดํ ํจ์๋ ๊ธฐ์กด์ ํจ์ ํํ์ธ function(parameter) { code } ํํ๋ฅผ ์ถ์ฝํ ๊ฒ์ผ๋ก ๊ธฐ์กด function ํํ๋ณด๋ค ์งง์ต๋๋ค.
์๋ ์์ฑ๋ ๊ตฌ๋ฌธ์ ํ ๋ฒ ๋ณผ๊น์?
๊ธฐ๋ณธ ๊ตฌ๋ฌธ
๋งค๊ฐ๋ณ์๊ฐ ํ๋๋ฟ์ธ ๊ฒฝ์ฐ ๊ดํธ๋ ์ ํ์ฌํญ
(param) => { code };
param => { code };๋งค๊ฐ๋ณ์๊ฐ ์๋ ํจ์๋ ๊ดํธ๊ฐ ํ์
( ) => { code };์ฌ๋ฌ ํ๋ผ๋ฏธํฐ(param)๋ฅผ ์์ฑํ ์ ์์
(param1, param2, ..., paramN) => { code };
(param1, param2, ..., paramN) => expression;
// ๋ค์๊ณผ ๋์ผ => { return expression };๊ณ ๊ธ ๊ตฌ๋ฌธ
๊ฐ์ฒด ๋ฆฌํฐ๋ด ํํ( { } )์ ๋ฐํ(return) ํ๊ธฐ ์ํด์๋ ํจ์์ ๋ณธ๋ฌธ์ ๊ดํธ( ( ) ) ์์ ๋ฃ์
param => ( {key: value} );Rest ํ๋ผ๋ฏธํฐ, Default ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์
(param1, param2, ...rest) => { code };
(param1 = defaultValue1, param2, ..., paramN = defaultValueN) => { code };ํ๋ผ๋ฏธํฐ ๋ชฉ๋ก ๋ด์ ๋น๊ตฌ์กฐํ(Destructuring, ๊ตฌ์กฐ ๋ถํด ํ ๋น)๋ ์ง์
([one, two]) = [1, 2]) => one + two;
({key: sum} = {key: 10 + 20}) => { code };
let f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;
f(); // 6MDN์์๋ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ๊ณผ ๊ณ ๊ธ ๊ตฌ๋ฌธ์ผ๋ก ๋๋์ด์ ์ค๋ช ์ ํฉ๋๋ค. ์ ๋ ๋๋์ด์ ํฌ์คํ ํ๋ ค๊ณ ํ๋๋ฐ ๊ทธ ์ด์ ๋ ์ ๊ฐ ์์ง Rest ํ๋ผ๋ฏธํฐ์ Default ํ๋ผ๋ฏธํฐ๋ฅผ ํฌ์คํ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ํฌ์คํ ์์ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๋ํด์๋ง ํฌ์คํ ํ๊ฒ ์ต๋๋ค.
์ค๋ช (ํจ์ ์์ฑ๋ฐฉ๋ฒ)
์์ ์์ฑํ ๊ตฌ๋ฌธ์ ์ฐธ๊ณ ํ๋ฉฐ arrow function(์ดํ, ํ์ดํ ํจ์)์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค :)
์ฐ์ ์ฒ์์๋ ์ธ๊ธํ๋ฏ์ด ํ์ดํ ํจ์๋
function(param) { code }
์์ ๊ฐ์ ๊ธฐ์กด์ function ํํ๋ฅผ ์ถ์ฝํด์
(param) => { code }
์์ ๊ฐ์ด ํ์ดํ ํจ์ ํํ๋ก ์์ฑํฉ๋๋ค. function ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์์์. ๋์ ํ์ดํ( => )๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์ ์ฝ๋๋ฅผ ํ๋ ๋ณด๊ณ ๊ฐ๊น์?
ES5
// ES5-1 var es5 = function(one, two) { return one + two; }; var sum = es5(1, 2); console.log(sum); // ๊ฒฐ๊ณผ๋ 3 ์ ๋๋ค. // ES5-2 function _es5(one, two) { return one + two; } var _sum = _es5(1, 2); console.log(_sum); // ๊ฒฐ๊ณผ๋ 3 ์ ๋๋ค.
ES6
// ES6-1 let es6 = (one, two) => { return one + two; }; let result = es6(1, 2); console.log(result); // ๊ฒฐ๊ณผ๋ 3 ์ ๋๋ค. // ES6-2 let _es6 = (one, two) => one + two; let _result = _es6(1, 2); console.log(_result); // ๊ฒฐ๊ณผ๋ 3 ์ ๋๋ค.
ES5๋ ๊ธฐ์กด function ํํ์ด๊ณ , ES6๋ ํ์ดํ ํจ์ ํํ์ ๋๋ค. ์์ ์์ฑํ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๋ณด์๋ฉด ์ค๊ดํธ( {} )๋ฅผ ์๋ตํ์ ๋ return ํค์๋๋ฅผ ์์ฑํ์ง ์์๋ ๋ฉ๋๋ค. ๊ทธ ๊ตฌ๋ฌธ์ ์์ ์ฝ๋ ์ฃผ์ ES6-2์ ์์ฑํด๋ดค์ต๋๋ค.
์์ง์ด ํ์ดํ ํจ์๋ฅผ ๋ง๋๊ฒ ๋๋ฉด ๋นํธ์ธ Function ์ค๋ธ์ ํธ์ prototype์ ์ฐ๊ฒฐ๋ ๋ฉ์๋๋ก ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ์ฌ es6 ๋ณ์(ํน์ _es6 ๋ณ์)์ ํ ๋นํฉ๋๋ค. ํ์ดํ ํจ์๋ ๋ฌด๋ช /์ต๋ช (anonymous) ํจ์์ ๋๋ค. ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด์ ์ ์์ ์ฝ๋์ ๊ฐ์ด ๋ณ์์ ํ ๋นํด์ผ ํฉ๋๋ค.
ํ์ดํ ํจ์์ ๊ฒฝ์ฐ ์์ ์ this, arguments, super ๋๋ new.target์ ๋ฐ์ธ๋ฉํ์ง ์์ต๋๋ค. ๊ด๋ จ ์ฝํ ์ธ ์ ์์ด ๋ง์ ๊ฒ์ผ๋ก ์์๋ผ์ ํฌ์คํ ์ ๋๋๊ฒ ์ต๋๋ค.
๋ค์ ํฌ์คํ ๊น์ง ์ข์ ๋๋ ๋ค ๋ณด๋ด์ธ์ :)
๊ฐ์ฌํฉ๋๋ค, JERRY ์์ต๋๋ค!
'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/ES6] Arrow(ํ์ดํ) ํจ์ - ์ฃผ์ํ ์ (0) 2019.05.28 [JavaScript/ES6] Arrow(ํ์ดํ) ํจ์ - thisํธ (0) 2019.05.21 [JavaScript/ES6] const ํค์๋ (0) 2019.05.07 [Javascript/ES6] for ( ) ๋ฌธ & NodeList (0) 2019.05.05 [Javascript/ES6] try - catch ์ switch - case (0) 2019.05.04