본문 바로가기
STUDY/JavaScript

JavaScript에서의 함수 유형

by Y.Choi 2023. 11. 17.
728x90
반응형

 

 

1. 일반 함수 (Function Declarations)
함수 선언문은 function 키워드를 사용하여 정의되는 일반적인 함수이다. 주로 함수 선언문은 전역 스코프나 함수 스코프에서 사용된다. 

function add(a, b) {
  return a + b;
}

 

 

2. 함수 표현식 (Function Expression) 

함수가 변수에 할당되는 방식으로, 함수가 값으로 취급된다. 주로 변수에 함수를 할당하는 경우나 익명 함수를 사용할 때 주로 사용된다.  함수 표현식은 익명 함수일 수도 있고, 이름이 있는 함수일 수도 있다. 

const add = function(x, y) {
  return x + y;
};

 

 

2-1. 익명 함수 (Anonymous Function)

함수 이름이 없는 함수를 익명 함수라고 한다. 주로 즉시 실행 함수 (IIFE)나 콜백 함수로 사용된다.

const multiply = function(x, y) {
  return x * y;
};

 

 

2-2. 이름 있는 함수 (Named Function)

함수에 이름이 있는 경우를 이름 있는 함수라고 한다. 이름 있는 함수 표현식은 함수 내부에서 자기 자신을 참조할 때 주로 사용된다.

const factorial = function factorial(n) {
  return n <= 1 ? 1 : n * factorial(n - 1);
};

 

 

3. 화살표 함수 (Arrow Functions)

ES6에서 도입된 간결한 함수 표현식이다. 주로 간단한 콜백 함수나 익명 함수로 사용되며, this를 바인딩하는 방식이 다르다.

const add = (a, b) => {
  return a + b;
};

 

- 매개변수가 하나일 때는 괄호 생략 가능: x => x * 2;
- 함수 본문이 한 줄일 경우 중괄호 생략 가능하며 그 값을 반환함: x => x * 2
- 매개변수가 없을 경우 빈 괄호 사용: () => console.log('Hello')

 

 

4. 메서드 (Object Methods)

객체에 속한 함수를 메서드라고 부른다. 메서드는 객체에 속하므로 해당 객체의 속성이나 다른 메서드에 접근할 수 있다.

const person = {
  name: 'John',
  sayHello: function() {
    console.log(`Hello, ${this.name}!`);
  }
};

person.sayHello();

 

- this 키워드
메서드 내에서 this 키워드는 해당 메서드를 호출한 객체를 가리킨다. this를 통해 메서드 내에서 객체의 속성에 접근할 수 있다.

 

 

5. 생성자 함수 (Constructor Functions)

new 키워드로 호출되어 객체를 생성하는 함수로, 주로 객체의 인스턴스를 생성할 때 사용된다.

function Car(make, model) {
  this.make = make;
  this.model = model;
}

const myCar = new Car('Toyota', 'Camry');

 

 

6. 콜백 함수 (Callback Functions)

다른 함수의 매개변수로 전달되는 함수로, 해당 함수의 실행이 이벤트 또는 특정 상태에 따라 호출된다.

function fetchData(callback) {
  // 비동기 작업 후
  callback();
}

fetchData(function() {
  console.log('Data fetched!');
});

 

 

7. 순수 함수 (Pure Functions)

부수 효과(side effect)가 없고 동일한 입력에 대해 항상 동일한 출력을 반환하는 함수이다. 

function add(a, b) {
  return a + b;
}

 

 

8. 제너레이터 함수 (Generator Functions):
함수 실행을 중간에 멈추고 재개할 수 있는 제너레이터 객체를 생성하는 함수이다.

function* generateNumbers() {
  yield 1;
  yield 2;
  yield 3;
}

const iterator = generateNumbers();
console.log(iterator.next().value); // 1

 

 

9. 내부함수 (Inner Function 또는 Nested Function)

함수 내부에서 정의된 함수를 내부(중첩) 함수라고 한다. 이러한 내부 함수는 외부 함수의 스코프에 접근할 수 있다.

function outer() {
  const outerVar = 'I am outer!';
  function inner() {
    console.log(outerVar);
  }
  inner();
}

 

 

10. 자체 실행 함수 (Self-Invoking Function 또는 Immediately Invoked Function Expression - IIFE)

함수를 정의하자마자 즉시 실행되는 함수다. 주로 스코프를 만들거나 초기화 코드를 실행하는 데 사용된다.

(function() {
  // 코드 실행
})();

 

 

11. 비동기 함수 (Async Function)

async 키워드를 사용하여 정의되며, 항상 Promise를 반환하는 함수이다.

await 키워드를 사용하여 비동기 작업의 완료를 기다릴 수 있다.

async function fetchData() {
  const result = await someAsyncOperation();
  return result;
}

 

 

12. 재귀 함수(Recursive Function)

재귀 함수는 함수 내부에서 자기 자신을 호출하는 함수를 말한다. 재귀 함수는 보통 어떤 작업을 작은 부분으로 나누어 해결하고자 할 때 사용되는데 예를 들어, 팩토리얼이나 피보나치 수열을 계산하는 데에 재귀 함수가 활용된다.

function factorial(n) {
  if (n <= 1) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

console.log(factorial(5)); // 출력: 120

 

 

13. 커링 함수 (Currying Function)

여러 개의 인자를 갖는 함수를 하나의 인자를 받는 함수 체인으로 변환하는 기법이다.

const add = x => y => x + y;

 

 

14. 고차 함수 (Higher-Order Function):
다른 함수를 인자로 받거나, 함수를 반환하는 함수다. 자주 사용되는 함수형 프로그래밍의 개념 중 하나이다.

const multiplyBy = factor => num => num * factor;
const double = multiplyBy(2);

 

 

15. 폐쇄 함수 (Closure Function):
외부 스코프의 변수에 접근할 수 있는 함수다. 일반적으로 내부 함수가 외부 함수의 변수를 기억할 때 발생한다.

function outer() {
  const outerVar = 'I am outer!';
  function inner() {
    console.log(outerVar);
  }
  return inner;
}
const closureFunc = outer();
closureFunc(); // 출력: I am outer!

 

 

728x90
반응형