Medium - JavaScript — Understand Arrow Function Syntax

원문 - Brandon Morelli

Trend 파악을 Medium 기고문 요약 포스팅 - 자바스크립트 - Arrow 함수 문법의 이해; 예제를 통해 arrow 함수의 문법을 알아봅시다

자바스크립트에 Arrow 함수가 추가된지 거의 3년이 지났지만 언어의 피처에 대해서 가장 많이 질문되는 것들 중 하나입니다.

Arrow함수는 다음과 같은 큰 장점이 있습니다.

  • 고전적인 함수보다 훨씬 짧은 문법
  • this의 바인딩이 필요 없음

이 기사에서는 arrow 함수의 짧은 문법과 동일한 함수 표현에 대해서 살펴볼 것입니다. 궁극적으로 우리는 Arrow 함수의 문법에 대한 이해를 갖게 될 것입니다.

Function Expression Syntax

함수 표현은 익명의 함수 객체를 변수에 할당하는 것입니다. 익명인 이유는 함수가 이름이 없기 때문이죠. function 키워드로 구성이 되며 0 혹은 그 이상의 매개변수가 따라오고 statements로 끝이 됩니다.

문법은 다음과 같습니다.

const name = function(parameters){
  statements
}

실제로는 이렇게 쓰이죠.

const double = function(num){
  return num * 2;
}

이 예제에서는 익명의 함수를 double 변수에 할당했습니다. function은 한개의 num 매개변수를 받고 num*2를 리턴하는 statement를 가지고 있습니다.

우리는 double을 다음과 같이 실행할 수 있습니다.

double(3);
// 6

Arrow Function Syntax

애로우 함수는 함수 표현과 비슷하지만 더욱 짧습니다. 여기에서도 우리는 익명의 함수를 변수에게 할당합니다. 애로우 함수의 문법은 0 혹은 그 이상의 매개변수와 화살표 => 그리고 함수의 statement로 끝이 납니다.

const name = (parameters) => {
  statements
}

실제로는 다음과 같이 쓰이며 double 함수는 애로우 함수 문법에서 다음과 같이 표현됩니다.

const double = (num) => {
  return num * 2;
}

위의 예제와 비교하면 아직은 큰 차이점이 없다는 것을 알 수 있으실 겁니다.

// Function Expression
const doubleEXP = function(num){
  return num * 2;
}
// Arrow Function
const doubleARR = (num) => {
  return num * 2;
}

여기서 한 것이라고는 function 키워드 대신 => 화살표를 넣은 것이죠.

결과값은 아래와 같이 동일합니다.

doubleEXP(3);
// 6
doubleARR(3);
// 6

애로우 함수는 사실 더욱 간단하게 쓰여질 수 있습니다. 위의 double 함수는 아래와 같이 표현될 수 있습니다.

const double = num => num * 2;

맞습니다, 그것들은 완전히 똑같은 함수입니다.

이것이 혼동스러울 수 있습니다만 왜 이 함수들이 동일한지 살펴보겠습니다.

const double = (num) => {
  return num * 2;
}
// Is the same as
const double = num => num * 2;

Arrow Function parameters

애로우 함수 파라미터들은 다음의 이유 때문에 매우 중요합니다. 매개변수의 수는 함수의 문법에 영향을 미칩니다.

  • 0개의 파라미터일 경우 애로우 함수는 빈 괄호를 가집니다.
    () => { statements }
    
  • 한개의 매개변수일 경우 매개변수 근처의 괄호를 생략할 수 있습니다.
    parameter => { statements }
    
  • 2개 이상의 매개변수일 경우 파라미터는 괄호속으로 들어갑니다.
    (param1, param2, ...) => { statements }
    

    다시 우리의 double 예제로 돌아와서 위의 규칙들을 적용하면 하나의 매개변수를 가진 애로우 함수는 괄호를 생략한다는 것을 알 수 잇습니다.

    const double = (num) => {
    return num * 2;
    }
    // Is the same as
    const double = num => num * 2;
    

Arrow Function Return

애로우 함수는 리턴 문법도한 짧게 되어 있습니다. 만약 애로우 함수가 단순히 한줄의 코드를 리턴한다면 중괄호와 return 키워드를 생략할 수 있습니다.

다음과 같은 함수 표현을 생각해봅시다.

let name = function(parameters){
  return expression
}

이렇게 짧게 될 수 있습니다.

let name = (parameters) => expression

이것을 기억해두면서 우리의 원본 double 예제를 봅시다. 여기서 우리는 이 규칙이 우리의 예제에 어떻게 적용되었는지 볼 수 있습니다.

const double = (num) => {
  return num * 2;
}
// Is the same as
const double = num => num * 2;

Key Takeaways

  • 애로우 함수가 받아들이는 매개변수의 수는 함수의 문법을 결정합니다.
  • 리턴 값이 한줄일 경우 괄호와 return 키워드를 생략할 수 있고 남겨진 statement를 리턴할 것입니다.

Challenges

이런 규칙들과 애로우 함수의 문법을 이해하는 즐거운 방법은 함수 표현을 애로우 함수로 변환해 보는 겁니다. 아래에 3가지 문제가 있습니다. 애로우 함수로 변환해 봅시다.

#1

const add3 = function(num1, num2, num3){
  return num1 + num2 + num3;
}
const add3 = (num1, num2, num3) => num1+ num2 + num3

#2

const square = function(num){
  return num ** 2;
}
const square = num => num ** 2;

#3

const sayHi = function(){
  console.log('Hi');
}
const sayHi = ()=> {
  console.log('Hi')
}

Important

이 기사는 오직 애로우 함수의 문법만 다뤘으며 애로우 함수의 this의 non-binding은 다루지 않았습니다.

Summary

  • 애로우 함수의 문법 정리, 더욱 간결하게 코드를 작성할 수 있음
  • 매개변수의 갯수에 따라 문법이 달라진다. /0개/1개/2개 이상/, return 값이 한 줄인 경우
  • this의 바인딩을 하지 않아도 됨 (추가 학습 필요)

© 2019. All rights reserved.

Powered by Hydejack v8.1.1