모던 자바스크립트 Deep Dive

[TIL/모던 자바스크립트 Deep Dive] 2023/05/18

12장. 함수 12-1. 함수란? 수학에서의 함수는 을 받아 을 내보내는 일련의 과정을 정의한 것이다. 프로그래밍 언어의 함수도 수학의 함수와 동일한 개념이다. 'x, y'는 함수 내부로 입력을 받아들이는 변수(=아직 결정되지 않은 임의의 값을 나타내는 기호)이다

2023년 5월 18일2min read

shallow copy vs deep copy

객체를 '프로퍼티 값'으로 갖는 객체의 경우, 얕은 복사(shallow copy)는 한 단계까지만 복사하는 것을 말하고, 깊은 복사(deep copy)는 객체에 중첩되어 있는 객체까지 모두 복사하는 것을 말한다.

얕은 복사(shallow copy)

깊은 복사(deep copy)

깊은 복사는 false, false가 나와야 하는데...

npm install로 접근하니 정상적으로 작동했다.

12장. 함수

12-1. 함수란?

수학에서의 함수는 ``입력(input)`을 받아 `출력(output)``을 내보내는 일련의 과정을 정의한 것이다. 프로그래밍 언어의 함수도 수학의 함수와 동일한 개념이다.

'x, y'는 함수 내부로 입력을 받아들이는 변수(=아직 결정되지 않은 임의의 값을 나타내는 기호)이다. '2, 5'는 함수에서 정의된 일련의 과정을 실행하기 위해 필요한 입력(input)이며, '7'은 함수의 실행 결과인 출력(output)이다.

프로그래밍 언어의 함수는, 일련의 과정을 ``문(statement)`으로 구현하고 `코드 블록`으로 감싸서 `하나의 실행 단위로 정의``한 것이다. 프로그래밍 함수에서 사용되는 용어는 다음과 같이 정리할 수 있다.

함수는 위 코드와 같이, '함수 정의(function definition)'를 통해 생성한다. 다만, 함수 정의만으로 함수가 실행되는 것은 아니다. 입력(input), 즉 인수(argument)를 매개변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시해야 한다. 이러한 과정을 '함수 호출(function call)'이라 한다.

12-2. 함수를 사용하는 이유

함수의 사용은, 동일한 작업을 반복적으로 수행해야 할 때, ``코드의 재사용``이라는 측면에서 대단히 효율적인 방식이다.

함수를 통해 유지보수의 편의성을 높이고, 실수를 줄여 코드의 신뢰성을 높일 수 있다.

추가적으로, 함수는 객체 타입의 값이다. 따라서 이름(=식별자)를 붙일 수 있는데, 함수명은 자신의 역할을 잘 설명해야 한다. 적절함 함수명의 사용은 내부 코드를 이해하지 않은 상황에서도 함수의 역할을 파악할 수 있게 돕는다. 이는 곧 코드의 가독성 향상으로 이어진다.

12-3. 함수 리터럴

어떠한 개념을 숙지할 때, 한마디로 정의하는 과정이 꼭 필요하다고 생각한다. 가령 "배열은 인덱스(=순서)가 있는 객체일 뿐이다."라는 식으로 개념을 이해하고자 노력한다.

그렇다면 함수는 다음과 같이 정의할 수 있다. ``"함수는 호출할 수 있는 객체일 뿐이다."``

함수 리터럴은 함수 표기법 정도로 해석할 수 있다. 함수 리터럴의 구성 요소와 각 구성 요소의 특징을 살펴봤다.

code
1. 함수 이름(ex. add)

- 함수 이름은 식별자다. 네이밍 규칙을 준수해야 한다.
- 힘수 이름은 함수 몸체 내에서만 참조할 수 있는 식별자다.
- 함수 이름은 생략 가능한데, 이름이 있는 함수를 기명 함수(named function), 이름이 없는 함수를 익명 함수(anonymous function)라 한다.
code
2. 매개변수 목록(ex. x, y)
- 0개 이상의 매개변수를 소괄호로 감싸고 쉼표로 구분한다.
- 각 매개변수에는 함수를 호출할 때 지정한 인수가 순서대로 할당된다. 매개변수 목록은 순서로서의 의미가 있다.
- 매개변수는 함수 몸체 내에서 변수와 동일하게 취급된다. 매개변수도 변수와 마찬가지로 식별자 네이밍 규칙을 준수해야 한다.
code
3. 함수 몸체(ex. {return x+y;})
- 함수가 호출되었을 때 일괄적으로 실행될 문들을 하나의 실행 단위로 정의한 코드 블록이다.
- 함수 몸체는 '함수 호출'에 의해 실행된다.

결론: 함수는 객체다. 그런데 이제 호출을 곁들인...

+) 함수가 객체라는 사실은 매우 중요하다고 한다. 차후에 18장 "함수와 일급 객체"에서 더욱 자세히 다루도록 하자!