박하은님이 정리한 내용입니다.
- 방어적복사:
원본이 바뀌지 않도록 하는 복사법
- 방어적 복사의 목적 2가지
안전지대의 불변성을 유지하고, 바뀔 수도 있는 데이터가 안전지대에 들어오지 못하도록 하는 것
원본 데이터가 바뀌는 것을 막아 불변성을 지키는 것
- 방어적 복사 규칙 2가지
- 데이터가 안전한 코드에서 나갈때 복사(안전 지대에 있는 데이터가 밖으로 나갈때 보호법):
나가는 데이터를 딥카피해 사본을 내보냄
- 안전한 코드로 데이터가 들어올때 복사(신뢰할 수 없는 코드에 있는 데이터가 안전지대로 들어올때 보호법):
들어온 데이터를 딥카피하고 원본은 버림
- 데이터가 안전한 코드에서 나갈때 복사(안전 지대에 있는 데이터가 밖으로 나갈때 보호법):
- 비공유 아키텍처:
모듈이 서로 통신하기위해 방어적 복사를 구현한 것
- 안전지대에서 방어적복사와 카피온라이트를 함께 쓰는 이유:
방어적 복사는 깊은 복사를 해 연산과 메모리가 많이 든다. 안전지대에서는 데이터를 전달할때 많은 복사를 안해도 되므로
- copy-on-write, 방어적 복사 비교
- 언제 쓰나요? copy-on-write: 통제할수있는 데이터를 바꿀떄. 방어적 복사: 신뢰할수없는코드와 데이터를 주고받을때
- 어디서: copy-on-write: 안전지대어디서나. 방어적 복사: 안전지대의경계에서 데이터가 오고갈때
- 복사 방식: 얕은/깊은
- 깊은 복사는 얕은 복사와 다르게 원본과
어떤 데이터 구조도 공유하지 않는다
- 깊은/얕은 복사 중 비공유 아키텍처를 구현하기 좋은 것은
깊은 복사
카피 온 라이트
가 불변성을 가진 안전지대를 만든다.