Skip to content

Latest commit

 

History

History
50 lines (50 loc) · 2.22 KB

240318-Chapter6.md

File metadata and controls

50 lines (50 loc) · 2.22 KB

Chapter6 정리

  • 함수형 프로그래밍은 데이터의 불변성이 중요함.
  • 이것을 지원하지 않는 언어에서도 불변성을 유지하게 하는 방법
    • 카피-온-라이트(copy-on-write)
  • 동작은 읽기, 쓰기 두 가지로 나눌 수 있음.
    • 제품 개수 가져오기 -> 읽기
    • 제품 이름으로 제품 가져오기 -> 읽기
    • 제품 추가하기 -> 쓰기
    • 제품 이름으로 제품 빼기 -> 쓰기
    • 제품 이름으로 제품 구매 수량 바꾸기 -> 쓰기
  • 카피 온 라이트
    • 복사본 만들기
    • 수정하기
    • 복사본 반환하기
  • 카피 온 라이트는 쓰기읽기로 변경함.
    • 왜? 기존 데이터를 변경하지 않고, 새로운 데이터를 만들어 냈으니까!
  • 기본적으로 카피 온 라이트는 얕은 복사를 활용함
    • 그렇다면, 배열 안의 객체를 수정할 때는 어떻게?
    • 변경 함수를 하나 더 만들어서 해당 객체만 복사하면 됨
    • 원래 코드
    function setPriceByName(cart, name, price){
        for(var i = 0; i < cart.length; i++>){
            if(cart[i].name === name){
                cart[i].price = price;
            }
        }
    }
    • 카피 온 라이트
    function setPriceByName(cart, name, price){
        var cartCopy = cart.slice();
        for(var i = 0; i < cartCopy.length; i++>){
            if(cartCopy[i].name === name){
                // cartCopy[i].price = price 는 안됨.
                // .slice() 함수는 얕은 복사를 하기 때문에 기존 값을 변경함.
                // 아래처럼 특정 객체만 복사해서 변경하는 함수를 새로 만들어서 사용하면 불변성을 유지할 수 있음.
                cartCopy[i] = setPrice(cartCopy[i], price);
            }
        }
        return cartCopy
    }
    function setPrice(item, newPrice){
        var itemCopy = Object.assing({}, item);
        itemCopy.price = newPrice;
        return item_copy
    }
  • 불변성을 지원하지 않는 언어에서는 불변성을 유지하도록 하는 것이 보일러 플레이트 코드가 될 수도 있음. 미리 공통 로직을 작성해 두는 것도 좋은 방법 중 하나임.