1.2.1 함수란 무엇인가?

하나의 블록으로 감싸서 실행 단위로 만들어 놓은 것

1.2.2 함수를 정의하는 4가지 방법

1. 함수 선언문

  • 일반적인 함수 선언과 비슷
  • 함수 이름을 명시하여 정의하는 방식
  • function myFunction()

2. 함수 표현식

  • 함수를 변수에 할당하는 방식
  • var myFunc = myFunction()

함수 선언문 vs 함수 표현식

    • 호이스팅(Hoisting)
      • 함수 선언문 : 호이스팅의 영향을 받아 함수 전체가 끌어올려짐. 선언 전에도 함수 호출 가능
      • 함수 표현식 : 변수 선언만 호이스팅되어 선언 전에 호출하면 undefined
  • 함수 이름 사용 여부
    • 함수 선언문 : 함수 이름을 사용
    • 함수 표현식 : 함수 이름 생략 가능 (오히려 함수에 이름을 주는 것은 방해 요소가 된다.)

3. Function 생성자

const add = new Function('a', 'b', 'return a+b')

add(10, 24)
  • Function 생성자를 활용하는 방식
  • 매개변수, 함수의 몸통을 모두 문자열로 작성해야하기 떄문에 권장하지 않는다.
  • 거의 사용되지 않는 방식

4. 화살표 함수

  • 화살표를 사용하여 만드는 함수. 간결하고, 가독성 좋음
  • 생성자 함수로 사용 불가능 (constructor 사용 불가능) 
 const Car = (name) => {
    this.name = name
  }
  const myCar = new Car('안녕') // TypeError
  • new 연산자로 호출 불가
  • 자신만의 this 값을 가지지 않기 때문
  • 화살표 함수의 this는 상위 스코프의 this를 가리키게 된다.
  • arguments 객체 사용 불가능 (arguments 객체 : 함수에 전달된 인수들을 배열과 유사한 형태로 저장하고 있는 객체)
const hi = () => {
    console.log(arguments)
  }
  hi(1,2,3) // ReferenceError : arguments is not defined
  • arguments 객체가 자동으로 생성되지 않기 때문에 인자를 정확하게 넘겨주지 않으면 Error
const hi = (...rest) => {
  console.log(rest) // [1,2,3]
}
hi(1,2,3)
  • arguments 대신에 Rest 매개변수를 사용할 수 있음. (전달된 모든 인수를 배열로 받음)

1.2.3 다양한 함수 살펴보기

1. 즉시 실행 함수

  • 말 그대로 함수를 정의하고 그 순간 즉시 실행되는 함수
  • 단 한 번만 호출되면 다시금 호출할 수 없다. (재사용 X)
  • 선언만으로 실행이 그 자리에서 끝난다는 것을 알 수 있기 때문에 리팩터링에도 도움.
(function (a,b) {
  return a + b
})(10, 24) // 34

((a, b) => {
  return a + b
})(10, 24) // 34

 

2. 고차 함수

  • 함수를 변수에 할당하거나, 함수의 인자로 전달하거나, 함수의 반환값으로 사용 가능

1.2.4 함수를 만들 때 주의해야 할 사항

1. 함수의 부수 효과를 최대한 억제하라

  • 부수 효과(side-effect) : 함수 외부에 영향을 끼치는 것
  • 순수 함수 : 부수 효과가 없는 함수
  • 순수 함수는 언제 실행되든 항상 결과가 동일하기 때문에 예측 가능하며 안정적임.
  • 예측 가능한 단위의 부수 효과가 작은 함수를 설계하면, 유지보수가 쉬워진다.

2. 가능한 한 함수를 작게 만들어라

  • 함수는 하나의 일을, 하나만 잘하면 된다.(Do One Thing and Do It Well)
  • 하나의 함수에서 너무 많은 일을 하게 하지 말 것
  • 코드의 길이가 길어질수록
    • 코드 냄새(문제를 일으킬 여지가 있는 코드)가 날 확률이 커지며,
    • 무슨 일이 일어나는지 예측할 수 없다.

3. 누구나 이해할 수 있는 이름을 붙여라

  • 가능한 한 함수 이름은 간결하고 이해하기 쉽게.

1.2.5 정리

함수 : 하나의 블록으로 감싸서 실행 단위로 만들어 놓은 것

 

함수를 정의하는 4가지 방법

  • 함수 선언문
  • 함수 표현식
  • Function 생성자
  • 화살표 함수

다양한 함수

  • 즉시 실행 함수
  • 고차 함수

함수를 만들 때 주의사항

  • 함수의 부수 효과를 최대한 억제하라
  • 가능한 한 함수를 작게 만들어라
  • 누구나 이해할 있는 이름을 붙여라

+ Recent posts