모던자바스크립트 스터디 4일차이다.
11장 원시값과 객체의 비교
12장 함수
오늘은 위 단원들을 공부하고 모르는것을 정리했다.
궁금증
자바스크립트가 언어 차원에서 immutable함을 제공해주지 않는 다는 것이다.
외부상태, 함수의 외부에서 함수 몸체 내부로 전달한 참조값에 의해 원본 객체가 변경되어 immutable 상태가 된다는 뜻이다.
불변성을 중요하게 생각한다고 책에 나와있는데, 불변성을 완벽히 제공해 주지 않는다니 이상했다.
이유
const라는 키워드만으로는 함수형프로그래밍이 요구하는 수준의 불변성을 실현하기 어렵다.
const로 객체를 선언할 경우 객체의 주소값 자체를 변경시킬 순 없어도, 객체 내부의 속성이 변경되는 것 까지는 막지 못하기 때문이다. 즉 객체의 속성값에 어떤 값이 추가되든 수정되든 삭제되든 지지고 볶든 삶아 먹든 기존 객체의 주소값은 동일한데,
그것까지 const가 캐치할 순 없다.
Object.assign, Object.freeze등 불변성을 지키기위한 언어적 측면의 노력이 있지만,
커다란 시스템에서 깊은 깊이까지의 불변성을 보장해 주지 못한다.
그래서 우리는 immutable.js 같은 라이브러리의 도움을 받아야만 한다.
라고한다.
책에 나와있는것과 블로그 글들은 달라서 조금 어려웠다.
요약하자면,
그러니까 number와 string은 불변성을 지원한다.
그래서 obejct에서 {키:값}에서 값이 number, string이라면 불변성을 지원하는것이다.
하지만, object는 불변성을 지원하지 않는다.
객체 안의 값이 mutable하다는 것이다.
생각해보면, 함수도 결국 객체(object)이다.
따라서 함수도 mutable하다는 것이다.
함수의 값이 바뀌는 것들을 막기 위해 위처럼 immutable.js 같은걸 쓰는 이유인 것이다.
근데 이럴꺼면 class를 쓰는게 맞지 않나 싶다.
그래서 backend는 class로 api를 작성하고
FE는 함수형 프로그래밍을 하는건가 생각이 들었다.
참고
왜 자바스크립트는 불변성을 완벽히 지원해주지 못할까?
자바스크립트 함수종류와 함수와 화살표함수 차이
https://yceffort.kr/2020/10/6-different-ways-to-declare-javascript-function
'JaveScript > JaveScript' 카테고리의 다른 글
모던자바스크립트 15, 16장 스터디 (0) | 2023.11.20 |
---|---|
모던자바스크립트 13, 14장 스터디 (0) | 2023.11.19 |
모던 자바스크립트 9, 10장 스터디 (0) | 2023.11.17 |
왜 NaN === NaN 는 false이고 0 === -0은 true 일까? (0) | 2023.11.16 |
null과 undefined의 차이 (0) | 2023.11.15 |