본문으로 건너뛰기

index

암묵적 입력과 출력은 적을수록 좋다.

  • 인자가 아닌 모든 입력과 리턴은 암묵적이며 이는 없을 수록 좋다.

  • 암묵적 입력과 출력은 다른 컴포넌트와 강하게 연결되었음을 의미하며, 다른 곳에서 사용할 수 업식에 모듈이 아니다.

카피온 라이트 빼내기

const new_cart = cart.slice();
new_cart.push(item);
return new_cart;
  • 위 함수는 재사용성이 좋지만 이름은 장바구니에서만 써야할 것 같습니다.
  • 이를 공통성 있는 함수로 변경을 위해선 네이밍을 수정한다.

const add_element_last (array, elem) =>{
var new_array = array.slice();
new_array.push(elem);
return new_array
}
  • 이름을 바꾼것만으로도 이 함수는 재사용성이 극대화된 utilty 함수가 되었음을 알 수 있다.
  • 이를 바탕으로 이 함수를 포팅해 사용이 가능하다.
  • 이를 이용해 각 함수는 데이터의 구조를 알지 않아도 되는 형식으로 바꼈다.
const add_new_cart = (cart, item) = > {
return add_element_last(cart,item)
}

모든 동작 불변형으로 만들기

에시

장바구니 동작

  1. 제품 갯수 가져오기
  2. 제품 이름으로 제품 가져오기
  3. 제품 추가하기
  4. 제품 이름으로 제품 빼기
  5. 제품 이름으로 제품 구매 수량 바꾸기

제품에 대한 동작

  1. 가격 설정하기
  2. 가격 가져오기
  3. 이름 가져오기
  • 동작에는 크게 읽기 쓰기가 있습니다. 쓰기 동작은 불면성을 지켜야 하며 이를 카피온라이트라 칭합니다.
  • 카피온 라이트를 이용하면 쓰기 동작을 읽기로 바꿀 수 있습니다.
const remove_item_by_name(cart, name)=>{
var idx = null
for (var i = 0 ; i < cart.length; i++)
{
if(cart[i].name === name ) idx = i ;
}
if(idx !== null ) cart.splice(idx,1 )
}

카피온 라이트를 이용해 복사본을 생성해 제거할 수 있다.

//before
const remove_item_by_name = (cart, name) => {
var new_cart = cart.slice();
var idx = null;

new_cart.forEach((element) => {
if (new_cart[i].name === name) {
idx = i;
}
});
if (idx !== null) new_cart.splice(idx, 1);

return new_cart;
};

//after
const removeImtems (array,idx,count) {
var copy = array.slice()
copy.splice(idx,count);
return copy
}


const remove_item_by_name = (cart, name) => {
var idx = null;
new_cart.forEach((element) => {
if (new_cart[i].name === name) {
idx = i;
}
});
if (idx !== null) removeImtems(cart, idx, 1);

return new_cart;
};
  • 이또한 공통 유틸을 하나 만들어 내부 복제를 줄일 수 있습니다.
  • 이를 이용해 객체를 복사하는 패턴을 반복해서 쓰지 않아도 된다.

자바스크립트 배열 흟어보기

  • 자바스크립트 배열은 기본적으로 컬렉션이다. 자바스크립트 배열은 순서 있는 값을 나타내는 컬렉션이다.
  • 인덱스로 접근할 수 있고, 값을 찾고 넣을 수 있습니다.

쓰기도 하면서 읽기도 하는 동작

  • js 내장 함수 shift는 값을 리턴과 동시에 값을 변경합니다.
  • 이를 구현하기 위해선 2가지 방법이 있습니다.
  1. 읽기와 쓰기 함수로 분리
  2. 함수에서 값 두개를 리턴

불변 데이터 구조를 읽는 것은 계산이다.

  • 변경 가능합 값을 읽는 것이 액션이라면
  • 불변 데이터 구조를 읽는 것은 계산이다.