[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
Amazon VPC Architecture 이해하기
새로운 프로젝트를 기획하며, 개발에서 무엇을 가장 먼저 고민해야 하는지 다시 돌아보게 되었습니다.한때는 프론트엔드가 모든 설계의 출발점이라고 믿었습니다. 유저가 무엇을 보고, 어떤 흐름에서 머무르고 이탈하는지에 대한 이해 없이 서비스를 만든다는 건 불가능하다고 생각했기
'원사이트'프론트엔드 관점으로 알고리즘 이해하기
오랜만에 방법론에 관한 글을 쓰게 되었습니다. 최근 상황은 이렇습니다. SSAFY에서는 하루에 엄청난 양의 알고리즘 문제들을 과제로 수행하게 됩니다. 그 과정에서, '구현력'이 매우 떨어진다는 생각이 들었습니다. 완전히 어려운 문제라면 '아쉬움'이라는 감정조차 느끼지
SubnetVPC 설계의 시작: IP와 Subnet
반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계