Input과 Output, 누가 주체가 될 것인가
호출한 함수가 호출된 함수의 결과값을 필요로 하는 것
A: 제 옷을 수선하고 싶습니다. 이걸 입고 약속 장소로 가야해요.
B: 알겠습니다. 보아하니 1시간 정도 소요될 것 같네요. 괜찮으세요?
A: 제가 바로 나가야해서 여기 앞에서 기다리고 있겠습니다. 최대한 빠르게 처리해주세요.
B: 네, 조금만 기다려주세요.
호출한 함수가 호출된 함수의 결과값을 필요로 하지 않으며 콜백 함수를 전달
호출된 함수의 수행이 끝난 후 콜백 함수 실행
A: 동생의 옷을 수선하고 싶습니다. 오늘 중에 입어야 한다네요.
B: 알겠습니다. 보아하니 1시간 정도 소요될 것 같네요. 혹시 직접 찾으러 오시나요?
A: 아니요. 저는 약속이 있어서 동생이 찾으러 올 겁니다.
B: 그렇다면 여기 동생분의 성함과 연락처를 남겨주시겠어요? 수선이 끝나면 동생분께 연락드릴게요.
(1시간 후)
B: 수선이 완료 되었으니 옷을 찾으러 오세요.
C: 네. 지금 가겠습니다.
언제 수신 되는가
호출한 함수가 호출된 함수에게 제어권을 전달
호출된 함수가 수행된 후 호출한 함수에게 제어권을 반환
이 때 제어권을 넘겨 준 호출한 함수는 반환받을 때까지 대기상태
A: 이 것 처리 좀 해주세요.
B: 네, 알겠습니다. 요구하신 것 총 20분 소요됩니다.
(5분 후)
A: 처리 됐나요?
B: (응답없음)
(5분 후)
A: 저기요?
B: (응답없음)
(10분 후)
B: 처리 되었습니다. 감사합니다.
호출한 함수가 호출한 함수에게 제어권을 전달하지 않고 보유
호출된 함수는 실행 후 종료
이 때 제어권을 보유한 호출한 함수는 호출된 함수와 별개로 제어권을 가지고 지속적인 실행
A: 이 것 처리 좀 해주세요.
B: 네, 알겠습니다. 요구하신 것 총 20분 소요됩니다.
(5분 후)
A: 처리 됐나요?
B: 아니요. 아직 15분 남았습니다.
(5분 후)
A: 지금은요?
B: 아직 기다리셔야 합니다. 10분 남았습니다.
(10분 후)
B: 처리 되었습니다. 감사합니다.
이 케이스는 굉장히 비효율적으로 보이는데 어떤 상황에서 효율적인지 예시를 알고 싶었으나 아직 찾지 못함 😭