[개발 서적] 함수형 코딩 Grokking Simplicity - 3

박연주·2024년 1월 7일
1

개발 서적

목록 보기
3/3

II. 일급 추상

ch16. 타임라인 사이에 자원 공유하기

  • 자원을 공유하지 않는 타임라인이 가장 좋음
  • 자원을 공유해야 한다면 안전하게 공유하기 위해 동시성 기본형(concurrency primitive)이라는 재사용 가능한 코드를 만들어 사용

좋은 타임 라인의 원칙

  1. 타임라인은 적을수록 이해하기 쉬움 (가능한 실행 순서의 개수 공식)
  2. 타임라인은 짧을수록 이해하기 쉬움
  3. 공유하는 자원이 적을수록 이해하기 쉬움
  4. 자원을 공유한다면 서로 조율해야 함
  5. 시간을 일급을 다룸

동시성 기본형

  • 자원을 안전하게 공유할 수 있는 재사용 가능한 코드를 말함


ch17. 타임라인 조율하기

  • 위의 5번째 원칙에 따라 시간을 다룰 수 있는 대상으로 생각하기
  • 타임라인을 나누기 위한 동시성 기본형
    - 여러 타임라인이 다른 시간에 종료되어도 서로 기다릴 수 있는 간단하고 재사용 가능한 기본형 필요
  • cut() 동시성 기본형
    • 어떤 타임라인 작업이 끝났을 때 이 함수를 부름
    • 이 함수는 호출될 때마다 호출된 횟수를 증가시킴
    • 마지막 타임라인이 함수를 호출했을 때 콜백을 불러줌
function Cut(num, callback) {
	var num_finished = 0;
  
  	return function() {
    	num_finished += 1;
      	if (num_finished === num)
          callback();
    };
}

// 예제
var done = Cut(3, function() {
	console.log("3 timelines are finished");
});

done();
done();
done();

console => "3 timelines are finished"

코드에 Cut() 적용하기

/// Before
function calc_cart_total(cart, callback) {
  var total = 0;
  cost_ajax(cart, function(cost) {
    total += cost;
  });
  
  shipping_ajax(cart, function(shipping) {
    total += shipping;
    callback(total);
  });
}


/// With Cut()
function calc_cart_total(cart, callback) {
  var total = 0;
  var done = Cut(2, function() {   // done()이 두번 호출될때까지
    callback(total);
  });
  cost_ajax(cart, function(cost) {
    total += cost;
    done();
  });
  shipping_ajax(cart, function(shipping) {
    total += shipping;
    done();
  });
}
  • 타임 라인 사진 캡쳐 (p.489)
profile
하루에 한 개념씩

0개의 댓글