메서드를 arrow function으로 정의해도 될까?

Yohan Kim·2023년 4월 5일
0

결론 부터 얘기하자면 '안좋다'

그 이유는 arrow function이 function 키워드와 완벽하게 동일한 일을 하지않기 때문이다.

arrow function vs function

공통점

  • 둘 다 함수를 정의하기 위해 사용됩니다.
  • 둘 다 매개변수를 받을 수 있습니다.
  • 둘 다 값을 반환할 수 있습니다.

차이점

  • arrow function은 항상 익명 함수입니다. 반면에, function 키워드로 정의한 함수는 익명 함수일 수도, 함수 이름을 가진 함수일 수도 있습니다.
  • arrow function은 자신만의 this 바인딩을 생성하지 않습니다. 대신, arrow function 내부의 this는 외부 스코프에서 상속됩니다. 반면에, function 키워드로 정의한 함수는 자신만의 this 바인딩을 생성합니다.
  • arrow function은 생성자 함수로 사용될 수 없습니다. 생성자 함수는 new 키워드와 함께 호출되며, 이때 객체 인스턴스를 생성하고 이를 반환합니다. arrow function은 자신의 this 바인딩을 생성하지 않기 때문에, new 키워드와 함께 호출될 경우 예기치 않은 동작을 할 수 있습니다.

발생하는 문제점

첫째, arrow function은 자신의 this 바인딩을 생성하지 않습니다. 대신, arrow function 내부의 this는 외부 스코프에서 상속됩니다. 반면에, function 키워드로 정의한 함수는 자신의 this 바인딩을 생성합니다.

그래서 만약 메서드 내부에서 this를 사용한다면, 화살표 함수를 사용할 경우 외부 스코프에서의 this를 상속하기 때문에 원하지 않는 동작을 할 수 있습니다. 따라서 메서드에서 this를 사용할 경우 function 키워드를 사용하는 것이 더 적절합니다.

둘째, arrow function은 생성자 함수로 사용될 수 없습니다. 생성자 함수는 new 키워드와 함께 호출되며, 이때 객체 인스턴스를 생성하고 이를 반환합니다. arrow function은 자신의 this 바인딩을 생성하지 않기 때문에, new 키워드와 함께 호출될 경우 예기치 않은 동작을 할 수 있습니다.

따라서 메서드를 구현할 때는 일반적으로 function 키워드를 사용하는 것이 더 적합합니다. 하지만, 메서드가 간단하고 this를 사용하지 않는다면, arrow function을 사용해도 상관없습니다. 또한, 메서드 내부에서 this를 사용하지 않는 경우에는 arrow function을 사용하는 것이 코드의 가독성을 높일 수 있습니다.

profile
안녕하세요 반가워요!

0개의 댓글