index
신뢰할 수 없는 코드 쓰면서 불변성 지키기
- 만약 신뢰할 수 없는 외부함수를 쓰는 경우 카피온 라이트를 적용할 수없다.
- 이 땐
방어적 복사를 이용하애 안전 지대를 지킬 수 있다. - 이 방어적 복사에는
깊은 복사를 사용한다.
const deepCopy(shopping_cart) =>{
...
}
const add = () => {
var copy_code = item.slice()
black_friday_promiton(deepCopy(copy_code))
}
우리가 만든 카피-온-라이트 코드는 신뢰할 수 없는 코드와 상호작용해야 한다.
우리가 만든 모든 코드는 불변성이 지켜지는 안전지대에 있고, 이 곳에 있는 코드는 걱정없이 사용 가능하다.
그렇다면 안전지대 밖에 있는 코드를 우리가 만든 코드에 사용해야할 때, 안전하지 않은 함수의 입, 출력을 통해 안전지대에 있는 코드와 데이터를 주고받아야 한다.
이때, 문제가 발생하는데, 안전지대 밖으로 나가는 데이터는 바뀔 수가 있다.
신뢰할 수 없는 코드가 데이터를 바꿀 수 있기 때문이다.
마찬가지로 신뢰할 수 없는 코드에서 안전지대로 들어오는 데이터 역시 바뀔 수 있다.
현 상황에서 카피-온-라이트로 문제를 해결할 수 없다.
여기서 데이터가 바뀌는 것을 완벽히 막아주는 원칙이 필요하며, 이를 방어적 복사 라고 한다.
방어적 복사는 원본이 바뀌는 것을 막아준다.
➡️ 신뢰할 수 없는 코드와 데이터를 주고 받는 문제를 푸는 방법은 복사본을 만드는 것이다.
데이터가 들어올 때
신뢰할 수 없는 코드에 있는 변경 가능한 데이터(참조를 가지고 있음)가 안전지대로 들어온다.
그 데이터를 안전지대에서 깊은 복사 한다.
깊은 복사로 만든 복사본은 안전지대에 있다.
신뢰할 수 없는 코드는 데이터가 바뀌어도 영향이 가지 않는다.
데이터가 나갈 때
안전지대에 있는 변경 불가한 데이터를 깊은 복사를 통해 복사한다.
깊은 복사를 한 데이터를 안전지대에서 내보낸다.
원본은 안전지대에 있어 불변성을 유지한다.
복사본이 변경되어도 원본에 영향을 미치지 않음.