[TIL/모던 자바스크립트 Deep Dive] 2023/05/18
12장. 함수 12-1. 함수란? 수학에서의 함수는 을 받아 을 내보내는 일련의 과정을 정의한 것이다. 프로그래밍 언어의 함수도 수학의 함수와 동일한 개념이다. 'x, y'는 함수 내부로 입력을 받아들이는 변수(=아직 결정되지 않은 임의의 값을 나타내는 기호)이다
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. 함수 리터럴
어떠한 개념을 숙지할 때, 한마디로 정의하는 과정이 꼭 필요하다고 생각한다. 가령 "배열은 인덱스(=순서)가 있는 객체일 뿐이다."라는 식으로 개념을 이해하고자 노력한다.
그렇다면 함수는 다음과 같이 정의할 수 있다. ``"함수는 호출할 수 있는 객체일 뿐이다."``
함수 리터럴은 함수 표기법 정도로 해석할 수 있다. 함수 리터럴의 구성 요소와 각 구성 요소의 특징을 살펴봤다.

1. 함수 이름(ex. add)
- 함수 이름은 식별자다. 네이밍 규칙을 준수해야 한다.
- 힘수 이름은 함수 몸체 내에서만 참조할 수 있는 식별자다.
- 함수 이름은 생략 가능한데, 이름이 있는 함수를 기명 함수(named function), 이름이 없는 함수를 익명 함수(anonymous function)라 한다.
2. 매개변수 목록(ex. x, y)
- 0개 이상의 매개변수를 소괄호로 감싸고 쉼표로 구분한다.
- 각 매개변수에는 함수를 호출할 때 지정한 인수가 순서대로 할당된다. 매개변수 목록은 순서로서의 의미가 있다.
- 매개변수는 함수 몸체 내에서 변수와 동일하게 취급된다. 매개변수도 변수와 마찬가지로 식별자 네이밍 규칙을 준수해야 한다.
3. 함수 몸체(ex. {return x+y;})
- 함수가 호출되었을 때 일괄적으로 실행될 문들을 하나의 실행 단위로 정의한 코드 블록이다.
- 함수 몸체는 '함수 호출'에 의해 실행된다.결론: 함수는 객체다. 그런데 이제 호출을 곁들인...
+) 함수가 객체라는 사실은 매우 중요하다고 한다. 차후에 18장 "함수와 일급 객체"에서 더욱 자세히 다루도록 하자!
More to read
프론트엔드와 백엔드 사이
HTTP 상태 코드는 프론트엔드에서 백엔드로 보냈던 요청의 수행 결과를 의미하는 일종의 약속이며, API를 구성하는 핵심 요소 중 하나입니다. 상태 코드와 관련하여, 백엔드는 잘 모르는 프론트엔드의 슬픈 사정이 있습니다.아래는 요청이 실패했음에도, 백엔드에서 상태 코드
JWT토큰 관리 방식 톺아보기
0. 들어가며 🎯 서비스에 접근하려는 사용자가 누구인지 확인하는 과정을 사용자 인증이라고 합니다. 인증된 사용자에게 주어진 권한을 확인하는 작업은 인가라고 부릅니다. 이번 글에서는 인가는 다루지 않습니다. 사용자 인증에는 많은 방식이 있지만, 오늘은 세션 인증 방
A2AA2A / MCP 멀티 에이전트 오케스트레이션
0. 들어가며 ✍️ Google for Developers에, 레스토랑 공급망 시나리오로 엮은 6대 프로토콜(MCP, A2A, UCP, AP2, A2UI, AG-UI)에 대한 가이드가 게시된 이후, MCP와 A2A부터 구현해 보는 것이 좋을 것 같다는 생각이 들었습니