함수에서 변경되는 값은 어디서 사용될지 모르기 때문에 값이 변하지 않도록 불변 데이터로 바꾸는 원칙이 필요하다.
이 장은 불변 데이터와, 변경 가능한 데이터를 불변형으로 유지할 수 있도록 하는 카피-온-라이트에 대해 소개한다.
변수는 언제 어디서 사용될지 모르기 때문에 값을 불변하게 만들어 언제 어디서든 같은 값을 호출할 필요가 있다. 이러한 불변 데이터에 대해 알아보자.
불변 데이터는 절대 변하지 않는 데이터라고 하면, 반대로 가변 데이터는 변하는 데이터이기 때문에 불변데이터와 쓰이는 곳이 다를 것이다.
둘의 차이를 단순하게 예시로 들자면 불변 데이터는 지역 변수이고 가변 데이터는 전역 변수라고 할 수 있겠다. 불변 데이터는 언제 어디서 읽어도 값이 똑같고, 가변 데이터는 언제 어디서 읽을 때마다 값이 다를 수도 있다.
3장에서 배운 액션, 계산을 토대로 설명을 하자면, "불변 데이터 읽기"는 계산이 되고, "가변 데이터 읽기"는 액션이 될 것이다.
책에서는 액션 대신 계산을 쓰라고 했고, 액션을 쓰더라도 계산을 빼내는 연습을 하라고 하였는데, 그렇다면 가변하는 데이터 말고 불변한 데이터를 쓰는게 맞을까?
모든 곳에서 그러기는 힘들 것이다. 가변하는 데이터를 필요한 곳에서 쓸 때 불변하는 값으로 변경 후 사용하는 게 가장 안전할 것이다.
그래서 나온 것이 카피-온-라이트(Copy-On-Write)이다.
카피-온-라이트란?
1) 변경 가능한 데이터를 불변형으로 유지할 수 있는 원칙
2) 복사본을 만들고(얕은 복사), 원본 대신 복사본 변경
↳ 원본(전역변수)을 사용하는 대신 복사본(지역변수)을 사용하면, 가변 데이터 읽기에서 불변 데이터를 읽는 것이 되므로 계산이 될 것이다.
💡 불변 데이터↑ ⇒ 계산↑, 액션↓
나는 평소에 함부로 전역변수를 변경하고 읽는 실수를 하였는데, 이 장을 읽고 전역변수를 변경할 때 카피-온-라이트 방식을 사용하여 전역 변수를 변경하려고 의식적으로 노력하고 있다. 액션을 최소화 하고 계산을 최대화 하자!!!!!!