[번역] 함수의 형태들

--

원글: https://kentcdodds.com/blog/function-forms — Kent C. Dodds

저의 평소 리액트 컴포넌트를 작성하는 방식은 이와 같습니다:

이 코드에서 화살표 함수와 일반 함수를 섞어 사용하는 것을 찾으셨을 겁니다. 이 부분에 있어서 사람들에게서 얼마나 많은 질문을 받는지 아시면 놀라실 것입니다. 저는 어떠한 주제에 관해서 질문을 많이 받으면 블로그에 그에 대해 작성합니다, 자 이제 시작 해볼까요.

(이 글을 모두에게 더 명확하게 만들기 위해) 이 글에서 얘기해 볼 4가지 타입의 함수를 나열하겠습니다:

  1. 함수 선언식(function declarations)
  2. 함수 표현식(function expressions)
  3. 화살표 함수(Arrow functions)
  4. 객체 매소드(Object methods)

각 함수의 형태가 조금씩 다른 의미를 가지고 있습니다만, 이 글에서 모두 설명하는 수고는 하지 않겠습니다.

저는 화살표 함수가 생기기 전에 자바스크립트로 코딩을 하였습니다. 그래서 저는 함수 선언식과 함수 표현식 이 익숙해져 있었습니다. 그리고 언제 어떤 함수를 사용해야 하는지 저만의 “느슨한" 규칙들을 만들었습니다. 그건 이와 같습니다:

  1. 저는 콜백함수를 사용할 때는 함수 표현식 을 사용합니다.
  2. 저는 객체의 속성으로 사용할 때는 함수 표현식 을 사용합니다.
  3. 저는 위 2가지 상황이 아닌 경우에는 함수 선언식을 사용합니다.

함수 선언식을 선호하는 이유는 이렇습니다. 함수 표현식 에는 없지만 선언식 에는 이 기능이 있기 때문이죠: 함수 선언의 호이스팅

이 에러는 우리가 가장 좋아하는Uncaught TypeError: undefined is not a function 입니다 (요즘은 자바스크립트 엔진이 이런 요소에 발전을 해서Uncaught TypeError: thisThrowsAnError is not a function 가 되겠군요)

하지만 기억하세요. 이 규칙들은 “느슨”하기 때문에 저도 항상 따르지 않고, 또 ESLint 같은 도구들을 통해서 강제되어야 한다고 생각하지도 않습니다.

화살표 함수와 객체 메소드 방법들이 생기고 나서 저의 느슨한 규칙들 에 작은 변화를 주었습니다:

  1. 저는 콜백 함수를 사용할 때는 화살표 함수를 사용합니다.
  2. 저는 함수가 여러줄 이거나, 또는 아무것도 반환하고 싶지 않을 때 객체 메소드를 사용합니다. 이 외에는 화살표 함수를 사용합니다.
  3. 저는 암묵적 반환(implicit return)기능이나 렉시컬 스코프(lexical scope)기능(‘this’가 제 생각대로 동작하게 해주는)을 이용하고 싶으면 화살표 함수를 사용합니다.
  4. 그 외로는 함수 선언식을 사용합니다.

그리고 가끔씩 한줄짜리 무언가를 반환하는 함수에는 함수 선언식을 사용합니다. 왜냐하면 디버거(debugger)문이나 console.log를 사용하기 더 쉽기 때문이죠.

이것들은 꼭 지켜야하는 엄중한 규칙들이 아닙니다. 다양한 형태의 함수를 사용해야 하는 이유는 이보다 더 많습니다. 사실 콜백 함수에는 함수 표현식 을 사용하는 것이 틀림없이 더 좋을지도 모릅니다, 왜냐하면 함수에 이름을 지정해줌으로 디버깅에 도움이 될지도 모르니까요 (저도 가끔씩 이러한 이유로 해야겠습니다).

아무튼, 흥미로운 주제였기를 바랍니다!

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

민동준
민동준

Written by 민동준

저는 영화와 책, 커피와 맥주, 음악과 달리기를 좋아합니다.

No responses yet

Write a response