whatisthis?

javaScript. μ½œλ°±ν•¨μˆ˜(Callback) λ³Έλ¬Έ

WEB STUDY/JAVASCRIPT

javaScript. μ½œλ°±ν•¨μˆ˜(Callback)

thisisyjin 2022. 1. 24. 13:22

 Callback 

 


 

 

πŸ“Œ ν•¨μˆ˜(Function)

 

 

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λŠ” 일급객체이닀.

일급 객체(first-class object)λž€,
λ‹€λ₯Έ 객체듀에 일반적으둜 적용 κ°€λŠ₯ν•œ 연산을 λͺ¨λ‘ μ§€μ›ν•˜λŠ” 객체λ₯Ό 가리킨닀.

β–ͺ λ³€μˆ˜μ— ν• λ‹Ή(assignment)ν•  수 μžˆλ‹€.
β–ͺ λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό 인자(argument)둜 전달받을 수 μžˆλ‹€.
β–ͺ λ‹€λ₯Έ ν•¨μˆ˜μ˜ κ²°κ³Όλ‘œμ„œ return 될 수 μžˆλ‹€.
β–ͺ μ‹€ν–‰ 도쀑에 생성될 수 μžˆλ‹€.

 

- μ½œλ°±ν•¨μˆ˜λŠ” μ΄μ€‘μ—μ„œλ„ 'λ§€κ°œλ³€μˆ˜λ‘œ 전달할 수 μžˆλ‹€', 즉 'λ‹€λ₯Έν•¨μˆ˜λ₯Ό 인자둜 전달받을 수 μžˆλ‹€' λŠ” νŠΉμ§•μ„ 이용.

 

 

πŸ“Œ μ½œλ°±ν•¨μˆ˜(Callback)

- λ‹€λ₯Έν•¨μˆ˜μ— λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨μ€€ ν•¨μˆ˜λ₯Ό 의미.

- λ§€κ°œλ³€μˆ˜λ‘œ λ„˜κ²¨λ°›μ€ ν•¨μˆ˜λŠ” 일단 λ„˜κ²¨λ°›κ³ , λ‚˜μ€‘μ— 호좜(called back)ν•œλ‹€λŠ” 의미.

 

 

즉, Aν•¨μˆ˜μ˜ 인수(argument)둜 λ“€μ–΄κ°„ ν•¨μˆ˜ Bλ₯Ό callback이라 ν•œλ‹€.

 

 

function A(par1, par2, par3) {
	par1 < 0? par2() : par3()        // μ‚Όν•­μ—°μ‚°μž γ…‘ 쑰건? true : false
}

function B {
	// λ‚΄μš©
}

function C {
	// λ‚΄μš©
}

A(1, B, C);        // A의 인수둜 Bν•¨μˆ˜μ™€ Cν•¨μˆ˜κ°€ 듀어감 γ…‘ B, CλŠ” μ½œλ°±ν•¨μˆ˜

 

- 총 λ‘κ°œμ˜ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ 

- A ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ λ§€κ°œλ³€μˆ˜λ‘œ 1,B,Cλ₯Ό μ „λ‹¬ν–ˆλ‹€.

>> 즉, par2에 Bλ₯Ό μ „λ‹¬ν•˜κ³ , par3에 Cλ₯Ό μ „λ‹¬ν–ˆμœΌλ―€λ‘œ B,Cκ°€ μ½œλ°±ν•¨μˆ˜κ°€ λœλ‹€.

 

 

<κ³Όμ •>

μš°μ„ , Aν•¨μˆ˜κ°€ λ¨Όμ € 호좜되고

par1의 값에 따라 B와 C쀑 ν•œκ°€μ§€κ°€ λ‚˜μ€‘μ— ν˜ΈμΆœλœλ‹€.

 

μœ„ μ˜ˆμ œμ—μ„œλŠ” par1이 0보닀 ν¬λ―€λ‘œ false - par3()에 μ˜ν•΄ Cν•¨μˆ˜κ°€ 싀행됨.

 

 

 


 

κ·Έλ ‡λ‹€λ©΄, μ½œλ°±ν•¨μˆ˜λŠ” μ™œ ν•„μš”ν• κΉŒ?

- λ³€μˆ˜μ˜ scope(μŠ€μ½”ν”„), 즉 μœ νš¨λ²”μœ„μ™€ 동기/비동기λ₯Ό 이해해야함.

 

μš°μ„ μ€, μ½œλ°±ν•¨μˆ˜λŠ” μœ„ μ˜ˆμ œμ™€ 같이

μ—¬λŸ¬ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ³ , μ–΄λŠ ν•œ ν•¨μˆ˜κ°€ 싀행될 λ•Œ

상황에 따라 ν•„μš”ν•œ λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ³  싢을 λ•Œ ν™œμš© κ°€λŠ₯.

 

λ•Œλ‘œλŠ” κ°€λ…μ„±μ΄λ‚˜ μ½”λ“œ μž¬μ‚¬μš©μ„ μœ„ν•΄ 쓰기도 ν•œλ‹€.

 

function add(a,b) {
   return a + b;
}


function sayResult(value) {
   console.log(value);
}

sayResult(add(3, 4));

 

μœ„μ™€ 같은 μ½”λ“œλ₯Ό callback을 μ΄μš©ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

function add(a, b, callback) {
   callback(a + b);
}

function sayResult(value) {
   console.log(value);
}

add(3, 4, sayResult);

κ²°κ³ΌλŠ” κ°™μ§€λ§Œ, ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” μ‹œμ μ΄λ‚˜ λ™μž‘ν•˜λŠ” μˆœμ„œκ°€ μ‘°κΈˆμ”© 달라진닀.

 

 

 


 

 

πŸ“Œ κ³ μ°¨ν•¨μˆ˜ (High-order function)

- ν•¨μˆ˜λ₯Ό 인자(argument) λ˜λŠ” λ§€κ°œλ³€μˆ˜(parameter)둜 λ°›κ±°λ‚˜ ν•¨μˆ˜λ₯Ό 리턴함.

- κ³ μ°¨ ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 전달받은 콜백 ν•¨μˆ˜λ₯Ό 호좜 μ‹œμ μ„ κ²°μ •ν•˜μ—¬ ν˜ΈμΆœν•œλ‹€.

 

>> 콜백 ν•¨μˆ˜λŠ” κ³ μ°¨ ν•¨μˆ˜μ— μ˜ν•΄ 호좜되며,

이 λ•Œ κ³ μ°¨ ν•¨μˆ˜λŠ” ν•„μš”μ— 따라 콜백 ν•¨μˆ˜μ— 인수λ₯Ό 전달할 수 μžˆλ‹€.

 

- μ½œλ°±ν•¨μˆ˜κ°€ κ³ μ°¨ν•¨μˆ˜ λ‚΄λΆ€μ—λ§Œ ν˜ΈμΆœλœλ‹€λ©΄?

μ½œλ°±ν•¨μˆ˜λ₯Ό 읡λͺ…ν•¨μˆ˜ λ¦¬ν„°λŸ΄λ‘œ μ •μ˜ (μ΄λ¦„βŒ) - λ°”λ‘œ κ³ μ°¨ν•¨μˆ˜μ— 전달함.

job(5, function (num) {       // 읡λͺ…ν•¨μˆ˜ λ¦¬ν„°λŸ΄
   if(num % 2 == 0) console.log(num);
});

** λ¦¬ν„°λŸ΄ = new 없이 μ„ μ–Έ. 

** 읡λͺ…ν•¨μˆ˜ = ν•¨μˆ˜λͺ… λŒ€μ‹  λ³€μˆ˜λͺ…에 ν•¨μˆ˜ μ½”λ“œλ₯Ό μ €μž₯ν•˜λŠ” 방식. (끝에 μ„Έλ―Έμ½œλ‘  ν•„μš”) = ν•¨μˆ˜ ν‘œν˜„μ‹

( ν˜Έμ΄μŠ€νŒ… X )

 

πŸ“’ ν•¨μˆ˜ν‘œν˜„μ‹μ€ 주둜 콜백으둜 μ‚¬μš©λ¨ (읡λͺ…ν•¨μˆ˜ λ¦¬ν„°λŸ΄λ‘œ μ •μ˜)

 

 

πŸ“Œ μ½œλ°±ν•¨μˆ˜ (Callback)

- μ „λ‹¬μΈμž(argument)둜 λ°›λŠ” ν•¨μˆ˜.

- λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 λ‹€λ₯Έ ν•¨μˆ˜μ˜ λ‚΄λΆ€λ‘œ μ „λ‹¬λ˜λŠ” ν•¨μˆ˜.

 

- λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 μ½œλ°±ν•¨μˆ˜λ₯Ό μ „λ‹¬λ°›λŠ” ν•¨μˆ˜ = κ³ μ°¨ν•¨μˆ˜

 

 

 


 

μΆ”ν›„ λ‚΄μš© μΆ”κ°€μ˜ˆμ •.

 

 

 

 

REFERENCE

 

 

[λ²ˆμ—­] JavaScript: λ„λŒ€μ²΄ 콜백이 뭔데?

이 λ¬Έμ„œλŠ” Brandon Morelli의 JavaScript: What the heck is a Callback? 을 λ²ˆμ—­ν•œ κ²ƒμž…λ‹ˆλ‹€. 잘λͺ»λœ 뢀뢄이 μžˆλŠ” 경우 μ•Œλ €μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

medium.com