Search
⏱️

6. 변경 가능한 데이터 구조에서 불변성 유지하기

모든 동작을 불변형으로 만들 수 있나요?

데이터가 중첩되어 있을 경우 기본적으로 카피-온-라이트를 통해 불변 동작 구현 필요 *중첩 (nested): 데이터 구조 안에 데이터 구조가 있는 경우
**깊이 중첩 (deeply nested): 중첩이 이어지는 경우

동작을 읽기, 쓰기 또는 둘 다로 분류하기

특성
읽기
- 데이터를 바꾸지 않음 (데이터에서 정보를 가져옴) - 인자에만 의존 시 계산임
쓰기
- 데이터를 바꿈 (바뀐 값이 어디서 사용될 지 모름 → 원칙 필요) - 불변성 원칙(copy-on-write)에 따라 구현해야 함 - 불변성 원칙 내장 언어: 하스켈, 클로저, 엘름, 퓨어스크립트, 얼랭, 엘릭서

카피-온-라이트 원칙 세 단계

1.
복사본 만들기
2.
본사본 변경하기
3.
복사본 리턴하기
“카피-온-라이트는 쓰기를 읽기로 바꿈”
// 카피-온-라이트를 통해 함수를 변경하면서 불변성 원칙을 지키는 예시 function add_element_last(array, elem) { var new_array = array.slice(); // 데이터를 직접 변경하지 않고 복사본을 변경 new_arrray.push(elem); // 암묵적 입/출력 없이 리턴값을 반환함 return new_aaray; }
JavaScript
복사