- 레거시 코드 : 오래전에 만든 것으로, 지금 당장 고칠 수 없어서 그대로 사용해야하는 코드.
- 상황 : 블랙 프라이데이 행사를 해야하는데 코드, 블랙 프라이데이 행사 코드는 바꿀 수 없는 레거시 코드이고, 그 코드는 전역 변수를 바꾸는 액션이다.
- 해결책 : 카피온 라이트 원칙을 지키면서 **“방어적 복사”**를 사용하면 된다.
<aside>
💡 결국 우리가 작성한 코드를 신뢰할 수 없는 레거시 코드와 상호작용을 해야되는 상황이다.
</aside>
- 블랙 프라이데이 행사 코드는 카피-온-라이트를 적용한 코드가 아니기 때문에, 신뢰할 수 없다.
- 우리가 만든 코드는 불변성이 지켜지는 안전지대에 있다.
- 신뢰할 수 없는 코드에 있는 데이터가 안전지대로 들어올때
- 깊은 복사로 원본을 복사해서 안전지대로 집어 넣는다.
- 안전지대에 있는 데이터가 밖으로 나가야 할때
- 안전지대에서 깊은 복사를 한 후에 밖으로 내보 냅니다.
<aside>
💡 들어오고 나가는 데이터의 복사본을 만드는 것이 방어적 복사가 동작하는 방식입니다.
</aside>
<aside>
💡 바뀔 수도 있는 데이터가 안전지대로 들어오지 못하도록, 하는 것이 방어적 복사의 목적입니다.
</aside>
규칙 1. 데이터가 안전한 코드에서 나갈 때 복사하기
- 변경 불가능한 데이터가 신뢰할 수 없는 코드로 나갈 때, 아래 단계로 원본 데이터를 보호 할 수 있다.
- 불변성 데이터를 위한 깊은 복사를 만듬
- 신뢰할 수 없는 코드로 복사본을 전달.