Language | Basic/JavaScript

[JavaScript 스터디] 함수

주정용 2021. 1. 23. 23:59
728x90
  • 일련의 과정을 문으로 구현하고 코드블록으로 감싸서 하나의 실행단위로 정의한 것
  • 자바스크립트에서 함수는 값
  • 함수이름, 매개변수, 인수, 반환값, 함수 몸체
  • 함수를 정의해서 생성하고 호출을 통해 사용함

함수 사용 이유

  • 코드의 재사용, 유지보수의 편리성, 코드의 신뢰성, 코드의 가독성

함수 리터럴

  • 리터럴은 값을 생성
  • 자바스크립트에서 함수는 객체 타입의 값
  • 함수이름 생략 가능
  • 함수 리터럴은 function, 함수이름, 매개변수, 몸체로 구성됨
    • 함수이름 : 함수 몸체 내부에서만 참조할 수 있는 식별자
  • 일반 객체는 호출 불가능, 함수는 호출 가능

함수 생성 방식

함수 선언문

  • 함수이름을 생략할 수 없음
  • 표현식이 아닌 문 --> 변수에 할당 불가능
  • 함수 이름은 함수 몸체에서만 참조하기에 함수 이름으로 외부에서 호출하는 것은 불가능
  • 자바스크립트 엔진은 함수 선언문을 변수에 할당하면 리터럴로 해석 --> 그래서 표현식이 아닌 문이지만 변수에 할당되는 것처럼 보임
  • 자바스크립트 엔진은 함수를 호출하기 위해 함수 이름과 동일한 식별자를 생성하고 함수를 할당함
  • 함수는 함수 이름으로 호출되는 것이 아닌, 함수 객체를 가리키는 식별자로 호출되는 것임

함수 표현식

  • 일급 객체는 값의 성질을 갖는 객체 --> 함수는 일급 객체
  • 함수 이름 생략 가능
  • 함수를 가리키는 식별자로 호출

함수 생성 시점

  • 함수 선언문
    • 런타임 이전 자바스크립트 엔진에 의해 생성 --> 런타임 이전에 함수 객체가 생성되고 변수가 초기화됨
    • 함수 선언문 이전에 함수 참조, 호출 가능 --> 함수 호이스팅
  • 함수 표현식
    • 변수 할당문의 값은 런타임에 평가
    • 함수 표현식의 함수 리터럴도 할당문이 실행되는 시점에 평가되어 함수 객체가 생성
    • 변수 호이스팅 발생

Function 생성자 함수

  • 일반적이지 않음 --> 지양

화살표 함수

  • 항상 익명함수로 정의

함수 호출

  • 인수 : 값으로 평가될 수 있는 표현식, 개수와 타입에 제한 X
  • 함수는 매개변수 개수와 인수 개수가 일치하는지 확인 안함, 에러도 발생 안함
  • 인수가 할당 X 매개변수는 undefined가 할당됨
  • 매개변수 개수 < 인수 개수 : 초과된 인수는 무시 --> 완전히 무시하는 건 아님
  • 모든 인수는 arguments 객체의 프로퍼티로 보관, 가변 인자 함수 구현에 사용
  • 매개변수의 최대 개수에는 제한이 없음
  • 이상적인 매개변수 == 0
  • 3개 이상의 매개변수가 사용되면 객체로 묶어서 매개변수로 사용
  • 객체를 인수로 사용하면 프로퍼티 키만 주의하면 됨, 프로퍼티의 순서는 무관
  • return 뒤에 반환값을 명시하지 않으면 undefined가 반환됨
  • return 뒤에 줄바꿈이 있으면, 아래줄은 실행이 안됨

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

  • 원시 값은 변경 불가능한 값이기에 매개변수가 원시값이면 원시 값이 매개변수에 복사되어 사용되기 때문에 부작용이 없음
  • 객체 타입 값이 매개변수에 할당되면 매개변수에는 객체를 참조하는 값이 할당되기 때문에 매개변수의 객체가 변경되면 원본 객체도 변경됨 --> 부작용

함수 형태

즉시 실행 함수

  • 정의와 동시에 즉시 호출되는 함수
  • 주로 익명 함수
  • 즉시 실행 함수는 그룹 연산자(())로 감싸야 함

재귀 함수

  • 자기 자신을 호출하는 함수
  • 함수 내부에서 자기 자신을 호출할 때에는 함수 이름이나 식별자로 호출
  • 탈출 조건 반드시 구현

중첩 함수

  • 함수 내부에 정의한 함수, 내부 함수
  • 외부 함수를 돕는 Helper
  • ES6부터 함수는 문이 위치할 수 있는 곳이라면 어디든 정의 가능
  • 호이스팅을 고려한다면 제어문 내에서 함수를 정의하는 것은 바람직하지 않음

콜백 함수

  • 매개변수를 통해서 고차 함수의 내부로 전달되는 함수
  • 변경되는 로직이 함수 외부에서 함수 내부로 전달되는 것임
  • 콜백 함수는 고차 함수에 의해 호출
  • 고차 함수는 콜백 함수에 인수를 전달할 수 있음
  • 콜백 함수는 재사용할 일이 없다면, 고차 함수의 매개변수에 익명 함수로 구현

순수 함수, 비순수 함수

  • 순수 함수는 외부 상태에 의존하지 않고, 외부 상태를 변경하지 않음 --> 부작용 X
  • 비순수 함수는 외부 상태에 의존하고, 외부 상태를 변경함 --> 부작용 O
  • 함수형 프로그래밍은 순수 함수와 보조 함수를 활용해 외부 상태 변화 부작용을 최소화 --> 불변성을 추구하는 프로그래밍

학습 도서

  • '모던 자바스크립트 Deep Dive', 이웅모 저, 위키북스

http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&linkClass=3314&barcode=9791158392239