킹의 개발일지

쏙쏙 들어오는 함수형 코딩 43일차 본문

독서/책너두 챌린지

쏙쏙 들어오는 함수형 코딩 43일차

k1ng 2023. 9. 27. 01:32

43일차 <타임라인 조율하기 2>

저번 파트에서는 Cut 메서드를 사용해서 두 ajax 콜백 중 마지막 콜백이 호출 됐을 때 실행 될 콜백을 지정해 타임라인을 조율 해 보았다. 이와 비슷하게 첫 번째 타임라임에 콜백이 실행되도록 하는 동시성 기본형을 만들어볼 수 도 있다. 이는 JustOnce()라고 해보고 만들어보자.

 

먼저 누군가에게 메세지를 보내는 함수를 사용한다고 해보자.

 

# sendAddToCartText

function sendAddToCartText(number) {
  sendTextAjax(number, "안녕하세요!");
}

 

다음은 어떤 함수를 새로운 함수로감싸는 JustOnce() 동시성 기본형이다.

 

# JustOnce

function JustOnce(action) {
  var alreadyCalled = false;       // 함수가 호출 됐는지 기억
  return function (a, b, c) {
    if (alreadyCalled) return;     // 실행된적 있다면 종료
    alreadyCalled = true;          // 함수가 실행 됐다고 기록
    return action(a, b, c);        // 인자와 함께 액션을 호출
  }
}

 

이렇게 만든 JustOnce 함수는 다음과 같이 쓰일 수 있다.

 

# 예시

var sendAddToCartTextOnce = JustOnce(sendAddToCartText);

sendAddToCartTextOnce("555-5555-5555");
sendAddToCartTextOnce("555-5555-5555");
sendAddToCartTextOnce("555-5555-5555");
sendAddToCartTextOnce("555-5555-5555");
sendAddToCartTextOnce("555-5555-5555");

// 여러번 호출 되더라도 JustOnce에 의해서 한 번만 호출 된다.

오늘은 Cut이외에 타임라인을 조율하는 JustOnce에 대해서 알아보았다. 타임라인을 조율한다는 것이 OS에서 배웠던 lock의 동작과 매우 흡사했다. 역시 CS는 개발 모든곳에 내재 돼 있어보인다.  CS도 가리지말고 열심히 공부해야겠다!