- 어떻게 하면 불변 동작을 구현할 수 있을까요?
동작을 읽기, 쓰기 또는 둘다로 분류하기
- 동작을 읽기 또는 쓰기 또는 둘다 하는 것으로 분류 할 수 있다.
-
읽기 :
- 읽기 동작은 데이터를 바꾸지 않고, 정보를 꺼내는 것이다.
- 데이터가 바뀌지 않기 때문에 다루기 쉽다.
- 만약 인자에만 의존해, 정보를 가져오는 읽기 동작이라면, 계산이라고 할 수 있다.
-
쓰기 :
- 쓰기 동작은 어떻게든 데이터를 바꾼다.
- 바뀌는 값은 어디서 사용될지 모르기 때문에 바뀌지 않도록 원칙이 필요하다.
<aside>
💡 쓰기 동작은 불변서의 원칙에 따라 구현해야한다. “카피 온 라이트”
</aside>
- 자바스크립트는 기본적으로 변경 가능한 데이터 구조를 사용하기 때문에 불변성 원칙을 적용하려면 직접 구현해야한다
- 반면에 하스켈, 클로저 같은 언어에서는 이미 구현 되어져있다.
카피온 라이트 원칙 세단계
- 장바구니 전역변수를 변경하는 동작을 모두 카피-온-라이트로 바꾸면, 장바구니는 더 이상 변경되지 않는다.
- 복사본 만들기
- 복사본 변경하기 ( 원하는 만큼 )
- 복사본 리턴하기
// 배열을 인자로 받아서 변경후 복사본 배열을 return 함.
function add_element_last(array, elem){
// 1. 배열 복사
var new_array = array.slice();
// 2. 배열 변경
new_array.push(elem);
// 3. 복사본 return
return new_array;
}
- 복사본은 함수 범위에 있기 때문에, 다른 코드에서 값을 바꾸기 위해 접근 할 수 없습니다.
- add_element_last 함수는 읽기일까? 쓰기 일까?