Untitled

카피 온 라이트를 적용할 수 없는 코드를 함께 사용해야 할 때, 어떻게 불변 데이터를 전달할 수 있을까?

레거시 코드와 불변성

레거시 코드에 쓸 수 있는 안전한 인터페이스가 필요하다.

블랙 프라이데이 행사 코드를 위해 한 줄 추가

function add_item_to_cart(cart, name, price) {
	var item = make_cart_item(name, price)
  shopping_cart = add_item(cart, item) 
  var total = calc_total(shopping_cart)
  set_cart_total_dom(total)
  update_shipping_icons(shopping_cart)
  update_tax_dom(total)
  black_friday_promotion(shopping_cart) // 이 코드가 필요하지만 이 코드는 장바구니를 바꿈
}

카피 온 라이트 원칙을 지키면서 안전하게 함수를 사용할 수 있는 원칙을 방어적 복사defensive copy라 한다.

카피 온 라이트 코드는 신뢰할 수 없는 코드와 상호작용해야 한다

Untitled

안전지대 밖에서 들어오는 데이터와 밖으로 나가는 데이터 모두 바뀔 수 있다. 따라서 불변성을 지키면서 데이터를 주고받아야 한다. 방어적 복사는 데이터가 바뀌는 것을 완벽히 막아주는 원칙이다.

방어적 복사는 원본이 바뀌는 것을 막아준다

핵심은 들어오고 나가는 데이터의 깊은 복사본을 만드는 것이다.

안전지대 안으로 들어오는 데이터