WEB/JavaScript

[자바스크립트] 함수

jimyu 2024. 7. 19. 11:34

함수란

  • 수학에서의 함수와 마찬가지로 프로그래밍 언어에서의 함수는 입력을 받고 출력을 내보내는 일련의 과정을 하나의 실행 단위로 정의한 것을 말한다.
  • 함수의 구성 요소
    • 매개 변수 : 함수 내부로 입력을 전달받는 변수
    • 입력 : 인수
    • 출력 : 반환값

함수 정의

  • 함수를 생성하는 것
  • 함수 호출 전 전달받을 매개변수, 실행할 문, 반환값을 지정한다.
  • 함수가 정의되면 JS엔진에 의해 평가되어 함수 객체가 된다.

함수 정의 방법

  1. 함수 선언문
    • 함수 이름생략 불가
    function add(x,y){
    	return x + y;
    	}
    
  2. 함수 표현식
  3. var add = function (x,y){ return x + y; };
  4. Function 생성자 함수
  5. var add = new Function('x', 'y', 'return x + y');
  6. 화살표 함수(ES6)
  7. var add = (x, y) => x + y;

함수 호출

  • 인수를 매개변수로 전달하면서 함수의 실행을 명시적으로 지시하는 것
  • 함수는 일반 객체와는 달라서 호출 가능하다.
  • 함수를 호출하면 현재 실행 흐름을 중단하고 호출된 함수로 실행 흐름을 옮겨간다.

매개변수, 인수

  • 함수 실행을 위해 외부의 값을 함수 내부로 전달해야 하는 경우 매개변수를 통해 인수를 전달한다.
  • 이때 인수란 값으로 평가될 수 있는 표현식이어야만 한다.
  • 매개변수는 함수 정의 시 선언하며, 함수 내부에서 일반 변수처럼 undefined로 초기화되었다가 순서대로 인수가 할당된다.
  • 매개변수는 함수 외부에서는 참조가 불가능하다.[스코프가 함수 내부]

인수 개수가 매개변수 개수보다 적으면 그냥 undefined 할당됨 / 더 많으면 초과된 인수는 무시됨

무시된 인수는 arguments 객체의 프로퍼티로 암묵적으로 보관된다.

💡 arguments 객체?
매개변수 개수를 확정할 수 없을 때 가변 인자 함수 구현할 때 사용

 

  • 매개변수는 순서에 의미가 있어서 많아질수록 유지보수성이 나빠진다. 따라서 최소한으로 가져가는 것이 좋다. 따라서 최대 3개 이상을 넘지 않는 것을 권장한다고 한다. 그 이상이면 객체를 인수로 전달하는 것이 유리하다. 대신 이 경우 함수 내부에서 객체를 변경하면 외부의 객체가 변경되는 부수 효과가 있다는 단점이 있다.

반환문

  • 생략 가능하다. 이 경우 마지막 문까지 실행하고 암묵적으로 undefined 반환.

다양한 함수 형태

1. 즉시 실행 함수

  • 함수 정의와 동시에 즉시 호출되는 함수
  • 반드시 그룹 연산자(…)로 감싸야 한다. 안 그러면 SytaxError 발생.
  • 따라서 단 한 번만 호출되며 다시 재호출이 불가하다.
  • 이름없는 익명 함수 사용하는 것이 일반적, 기명 함수를 쓰더라도 다시 호출할 수 없고 함수 내부에서만 참조할 수 있는 식별자
(function () {
	var a = 3;
	var b = 5;
	return a * b;
}());

2. 재귀 함수

  • 자기 자신을 호출하는 함수
  • 반복되는 처리를 위해 사용
  • 무조건 탈출 조건을 만들어야 한다.
  • 대부분 for/while문으로 구현

3. 중첩 함수/내부 함수

  • 함수 내부에 정의된 함수
  • 중첩 함수 포함하는 함수는 외부 함수
  • 주로 외부 함수를 돕는 helper function의 역할
  • 호이스팅 때문에 혼란스러울 수 있으니 if/for문 등의 코드 블록에서 함수 선언문으로 정의하는 것은 바람직하지 않다고 한다. → 이후에 추가적으로 살펴보기

4. 콜백 함수

  • 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백 함수라고 한다.
  • 콜백함수를 전달받은 함수를 고차 함수라고 한다. 고차 함수가 콜백 함수의 호출 시점을 결정한다.
  • 고차함수의 헬퍼 함수 역할을 한다.
  • 비동기 처리, 배열 고차 함수 등에서 사용

5. 순수 함수, 비순수 함수

  • 순수 함수 : 부수 효과가 없는 함수. 어떤 외부 상태에 의존하지도 변경하지도 않음.
    • 동일 인수가 전달되면 언제나 동일한 값을 반환한다.
    • 기본적으로 인수의 불변성을 유지한다(변경 X)
  • 비순수 함수 : 외부 상태에 의존하며, 외부 상태를 변경하는 부수 효과 있는 함수.
  • 함수형 프로그래밍 : 부수 효과 최소화해서 불변성을 지향하는 프로그래밍 패러다임