[JavaScript] 함수(Function)

2020. 8. 2. 12:12Programming Languages/JavaScript

함수란 어떤 작업을 수행하기 위한 필요한 코드들의 집합을 정의한 것이다. 함수는 이름과 매개변수를 가지며 필요할 때 호출하여 코드 블록에 담긴 코드들을 일괄적으로 수행한다.

 

함수는 호출했을 때 실행되는데 여러 번 재사용이 가능하기 때문에 효율적이다.

자바스크립트에서 함수는 객체이다. 다른 객체와 구분되는 특징은 호출이 가능하다는 점이다. 함수도 객체이므로 변수나 객체, 배열 등에 저장할 수 있고, 다른 함수에 전달되는 인수로도 사용할 수 있으며 함수의 return값이 될 수도 있다.

 

함수를 정의하는 방식은 3가지가 있다.

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

1. 함수 선언문

함수 선언문은 함수명, 매개변수 목록, 함수 몸체로 구성된다.

  • 함수명은 함수 몸체에서 재귀적 호출을 하거나 자바스크립트 디버거가 해당 함수를 구분할 수 있는 식별자이다.
  • 매개변수 목록은 0개 이상의 목록으로 괄호로 감싸고 콤마로 분리한다. 다른 언어와의 차이점은 매개변수의 타입을 적지 않는다는 것이다. 이 때문에 함수 몸체 내에서 매개변수의 타입 체크가 필요할 수 있다.
  • 함수 몸체는 함수가 호출되었을 때 실행되는 코드의 집합을 말한다. 중괄호({ })로 코드를 묶고 return 문으로 결과값을 반환할 수 있다.

 

2. 함수 표현식

자바스크립트의 함수는 일급 객체이므로 아래와 같은 특징이 있다(일급 객체의 특징과 같다.)

  1. 함수명 없이 리터럴로 표현이 가능하다.
  2. 변수나 자료구조(객체, 배열 등)에 저장할 수 있다.
  3. 함수의 파라미터로 전달할 수 있다.
  4. 반환값으로 사용할 수 있다.

함수의 일급 객체 특성을 이용하여 함수 리터럴 방식으로 함수를 정의하고 변수에 할당할 수 있는데 이러한 방식을 함수 표현식(Function expression)이라고 한다.

위의 sum(a, b)을 함수 표현식으로 정의하면 아래와 같다.

 

 

함수 표현식 방식으로 정의한 함수는 함수명을 생략할 수 있으며, 이러한 함수를 익명 함수(anonymous function)이라고 한다. 함수 표현식에서는 함수명을 생략하는 것이 일반적이다.

 

3. 일급 객체

함수는 일급 객체이므로 변수에 할당할 수 있는데 이 변수는 함수명이 아니라 할당된 함수를 가리키는 참조값을 저장하게 된다. 함수 호출 시 함수명이 아니라 함수를 가리키는 변수명을 사용해야 한다.

 

4. 매개변수와 인자

매개변수는 함수 내에서 변수와 동일하게 메모리 공간을 확보하며 함수에 전달한 인수는 매개변수에 할당된다. 만약 인수를 전달하지 않으면 매개변수는 undefined로 초기화된다.

 

4.1 값에 의한 호출

객체 타입이 아닌 인수는 값에 의한 호출로 동작한다. 이는 함수 호출 시 원시 타입 인수를 함수에 매개변수로 전달할 때 값을 복사하여 함수로 전달하는 것을 의미한다. 이 때문에 함수 내에서 값을 변경하여도 처음에 전달한 변수의 값은 바뀌지 않는다.

 

4.2 참조에 의한 호출

객체형 인수는 참조에 의한 호출로 동작한다. 이는 함수 호출 시 참조 타입 인수를 함수에 매개변수로 전달할 때 값을 복사하는 것이 아니라 객체의 참조값이 매개변수에 저장되어 함수로 전달되는 방식이다. 이 때문에 함수 내에서 값을 변경하면 처음에 전달한 변수의 값도 변경된다.

 

5. 반환값

함수는 자신을 호출한 코드에게 수행한 결과를 반환할 수 있다. 이때 반환된 값을 반환값이라고 한다.

  • return 키워드는 함수를 호출한 코드에게 값을 반환할 때 사용한다.
  • 함수는 배열 등을 이용하여 한 번에 여러 개의 값을 반환할 수 있다.
  • 함수는 반환을 생략할 수 있으며, 이때 반환값은 undefined 가 된다.
  • 자바스크립트 인터프리터는 return 키워드를 만나면 함수의 동작을 멈추고, 함수를 호출한 코드로 돌아간다. 만약 return 구문 이후에 다른 구문이 존재한다면 그 구문은 실행되지 않는다.

6. 함수 객체의 프로퍼티

자바스크립트에서 함수는 객체이다. 따라서 함수도 프로퍼티를 가질 수 있다.

 

'Programming Languages > JavaScript' 카테고리의 다른 글

[JavaScript] 객체  (0) 2020.08.11
[JavaScript] Prototype  (0) 2020.08.02
JavaScript 기초 - 형변환  (0) 2020.07.31
JavaScript 기초 - 자료형  (0) 2020.07.30
JavaScript 기초 - 변수와 상수  (0) 2020.07.30