JavaScript (9) 함수

류수민·2025년 12월 25일

JavaScript

목록 보기
9/20

함수

수학의 함수란 "입력(Input)"을 받아 "출력(Output)"을 내보내는 일련의 과정이다.

  • 프로그래밍의 함수란 일련의 과정을 문(Statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다.
  • 함수는 "매개 변수(Parameter)", "인수(Argument)", "반환값(Return Value)"로 구성된다.
  • 함수는 함수 정의로 생성된다.
// 함수 정의
function add(x,y) { //add: 함수 이름, (x,y): 매개변수
  return x + y; // x + y: 반환값
}
// 함수 호출
add (2,5); // (2,5): 인수

함수를 사용하는 이유

함수는 몇 번이든 호출할 수 있으므로 코드의 재사용 측명에서 유리하다.
또한, 코드의 중복을 줄이고 재사용성을 높이므로 유지보수의 편의성과 코드의 신뢰성을 높인다.

함수 리터럴

함수 리터럴은 function 키워드, 함수 이름, 매개 변수 목록, 함수 몸체로 구성된다.

함수 이름

  • 식별자 네이밍 큐칙을 준수해야 한다.
  • 함수 몸체 내에서만 참조할 수 있는 식별자다.
  • 생략 가능하다.

매개변수 목록

  • 0개 이상의 매개변수를 소괄호로 감싸고 쉼표로 구분한다.
  • 지정한 인수가 순서대로 할당된다. 즉, 순서가 중요하다.
  • 식별자 네이밍 규칙을 준수해야 한다.

함수 몸체

  • 함수 호출시 일괄적으로 실행될 문들을 하나의 실행 단위로 정의한 코드 블록이다.
  • 함수 몸체는 함수 호출에 의해 실행된다.

함수 정의

함수를 호출하기 이전에 인수를 전달받을 매개변수와 실행할 문들, 그리고 반환할 값을 지정하는 것.
변수는 선언, 함수는 정의

함수 정의 방식은 4가지가 있다.

1. 함수 선언문

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

console.dir(add); // f add(x,y)
console.log(add(2,5)); //7

함수 선언문은 식이 아닌 문이다.

함수 표현식

함수는 객체다. 함수는 값처럼 변수에 할당할 수도 있고 프로퍼티 값이 될 수도 있고 배열의 요소가 될 수도 있다. 즉, 함수는 일급 객체이다. 다른 말로, 함수는 값처럼 자유롭게 사용될 수 있다.

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

console.log(add(2,5)); //7

함수 생성 시점과 함수 호이스팅

함수 선언문은 함수 선언문 이전에 호출이 가능하지만 함수 표현식은 불가능.
함수 선언문은 런타임 이전에 먼저 실행되는 현상을 함수 호이스팅이라 한다.
함수 표현식으로 함수를 정의하면 변수 호이스팅이 된다. (undefined)

Function 생성자 함수

추천X

화살표 함수

=>
와 같이 표현한다.
익명 함수이다.

함수 호출

식별자와 소괄호인 함수 호출 연산자로 호출한다.

매개변수와 인수

함수 외부에서 함수 내부로 전달할 필요가 있는 경우 매개변수(인자)를 통해 인수로 전당한다.
매개변수는 함수 몸체 내부에서만 참조할 수 있고 함수 몸체 외부에서는 참조할 수 없다.
인수가 부족해 인수가 할당되지 않은 매개변수의 값은 undefined이다.
매개변수보다 인수가 더 많은 경우 초과된 인수는 무시한다.

인수 확인

  • 자바스크립트 함수는 매개변수와 인수의 개수가 일치하는지 확인하지 않는다.
  • 자바스크립트는 동적 타입 언어이므로 자바스크립트 함수는 매개변수 타입을 지정할 수 없다.

매개변수의 최대 개수

이상적인 함수는 한 가지 일만 해야 하며 가급적 작게 만들어야 한다.
따라서 매개변수가 3개를 넘지 않을 것을 권장한다.

반환문

  • 반환문은 함수의 실행을 중단하고 함수 몸체를 빠져나간다.
  • 반환문은 return 키워드 뒤에 오는 표현식을 평가해 반환한다.

참조에 의한 전달과 외부 상태 변경

함수를 호출하면서 매개변수에 값을 전달하는 방식을 값에 의한 호출, 참조에 의한 호출로 구별해 부르기도 한다.

함수에서 원시 타입 인수를 변경하면 값 자체가 복사되어 매개변수에 전달되기에 함수 몸체에서 그 값을 변경해도 원본은 훼손되지 않는다.
함수에서 객체 타입 인수를 변경하면 참조 값이 복사되어 매개변수에 전달되기에 함수 몸체에서 참조 값을 통해 변경하면 원본이 훼손된다.
-> 불변 객체로 만들어 사용하거나 깊은 복사를 통해 새로운 객체를 생성하고 재할당해 사용한다.

다양한 함수의 형태

즉시 실행 함수

함수 정의와 동시에 즉시 호출되는 함수.
단 한 번만 호출되며 다시 호출할 수 없다.

재귀 함수

힘수가 자기 자신을 호출하는 것.
반복 처리를 위해 사용한다.
대부분의 재귀 함수는 for 문이나 while 문으로 구현 가능하다. 따라서 재귀 함수를 사용할 때 더 직관적으로 이해하기 쉬울 때만 한정적으로 사용해야 한다.

중첩 함수

함수 내부에서 정의된 함수를 중첩 함수 또는 내부 함수라 한다. 또한, 중첩 함수를 포함하는 함수는 외부 함수라 한다.
중첩 함수는 외부 함수 내에서만 호출할 수 있다.

콜백 함수

함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수라 하며 매개변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수를 고차 함수라 한다.

순수 함수와 비순수 함수

어떤 외부 상태에 의존하지 않고 변경하지도 않는 부수 효과가 없는 함수를 순수 함수라한다. 반대로, 외부 상태에 의존하거나 변경하는 부수 효과가 있는 함수를 비순수 함수라 한다.

0개의 댓글