πŸ“š9μ£Όμ°¨ μŠ€ν„°λ”” μ€€λΉ„ [12μž₯ ν•¨μˆ˜]

pjw__98Β·2024λ…„ 1μ›” 17일
1

πŸ“šμŠ€ν„°λ”” λͺ…

λͺ¨λ˜ν•  수 μžˆλŠ”κ±° λ§žλŠ”κ±°λ‹ˆ?

πŸ“† ν•™μŠ΅ λ‚ μ§œ

2024/01/18(λͺ©) 5:00PM

πŸ“– 9μ£Όμ°¨ ν•™μŠ΅ λ²”μœ„

12μž₯ ν•¨μˆ˜(154.page ~ 188.page)


πŸŽ―ν•¨μˆ˜λž€?

ν•¨μˆ˜λž€ 일련의 과정을 λ¬Έ(statement)으둜 κ΅¬ν˜„ν•˜κ³  μ½”λ“œ λΈ”λ‘μœΌλ‘œ κ°μ‹Έμ„œ ν•˜λ‚˜μ˜ μ‹€ν–‰ λ‹¨μœ„λ‘œ μ •μ˜ν•œκ²ƒ.

ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μž…λ ₯을 μ „λ‹¬λ°›λŠ” λ³€μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜(parameter)
ν•¨μˆ˜ ν˜ΈμΆœν•  λ•Œ μž…λ ₯ 값을 인수(argument)
ν•¨μˆ˜ 내뢀에 좜λ ₯ ν•  값을 λ°˜ν™˜κ°’(return value)이라고 ν•œλ‹€.
λ˜ν•œ ν•¨μˆ˜λŠ” 값이며, μ—¬λŸ¬ 개 μ‘΄μž¬ν•  수 μžˆμœΌλ―€λ‘œ νŠΉμ • ν•¨μˆ˜λ₯Ό κ΅¬λ³„ν•˜κΈ° μœ„ν•΄ μ‹λ³„μžμΈ ν•¨μˆ˜ 이름을 μ‚¬μš©ν•  수 μžˆλ‹€.

ν•¨μˆ˜λŠ” ν•¨μˆ˜ μ •μ˜λ₯Ό 톡해 μƒμ„±ν•œλ‹€. κ·ΈλŸ¬λ‚˜ ν•¨μˆ˜ μ •μ˜λ§ŒμœΌλ‘œ ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ” 것은 μ•„λ‹ˆλ‹€.

ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ 인수λ₯Ό λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 ν•¨μˆ˜μ— μ „λ‹¬ν•˜λ©΄μ„œ ν•¨μˆ˜μ˜ 싀행을 λͺ…μ‹œμ μœΌλ‘œ μ§€μ‹œν•΄μ•Ό ν•œλ‹€.

이λ₯Ό ν•¨μˆ˜ 호좜(function call/invoke)이라 ν•œλ‹€.

πŸ“Œν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

ν•¨μˆ˜λŠ” λͺ‡ λ²ˆμ΄λ“  ν˜ΈμΆœν•  수 μžˆμœΌλ―€λ‘œ μ½”λ“œμ˜ μž¬μ‚¬μš©μ΄λΌλŠ” μΈ‘λ©΄μ—μ„œ 맀우 μœ μš©ν•˜λ‹€.

ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ μ½”λ“œμ˜ 쀑볡을 μ–΅μ œν•˜κ³  μž¬μ‚¬μš©μ„±μ„ λ†’μ΄λŠ” ν•¨μˆ˜λŠ” μœ μ§€λ³΄μˆ˜μ˜ νŽΈμ˜μ„±μ„ 높이고 μ‹€μˆ˜λ₯Ό 쀄여 μ½”λ“œμ˜ 신뒰성을 λ†’μ΄λŠ” νš¨κ³Όκ°€ μžˆλ‹€.

ν•¨μˆ˜λŠ” 객체 νƒ€μž…μ˜ 값이닀.λ”°λΌμ„œ 이름(μ‹λ³„μž)을 뢙일 수 μžˆλ‹€.
각 ν•¨μˆ˜λ§ˆλ‹€ μ–΄λ–€ μ—­ν• μ˜ ν•¨μˆ˜μΈμ§€ λ³€μˆ˜ μ΄λ¦„μœΌλ‘œ λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λ‚Ό 수 μžˆκΈ°λ–„λ¬Έμ— μ½”λ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚€κΈ°λ„ν•œλ‹€.

μ½”λ“œλŠ” λ™μž‘ν•˜λŠ” κ²ƒλ§Œμ΄ 쑴재 λͺ©μ μ΄ μ•„λ‹ˆλ‹€. μ½”λ“œλŠ” 개발자λ₯Ό μœ„ν•œ λ¬Έμ„œμ΄κΈ°λ„ ν•˜λ‹€. λ”°λΌμ„œ μ‚¬λžŒμ΄ 이해 수 μžˆλŠ” μ½”λ“œ, 즉 가독성이 쒋은 μ½”λ“œκ°€ μ’‹μ€μ½”λ“œλΌκ³ ν•œλ‹€.

πŸ“Œ ν•¨μˆ˜ μ •μ˜

ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” λ°©λ²•μ—λŠ” 4κ°€μ§€κ°€ μžˆλ‹€.

  • ν•¨μˆ˜ μ„ μ–Έλ¬Έ
    ν•¨μˆ˜ 이름을 μƒλž΅ν•  수 μ—†λ‹€.
 <script>
 function (x,y){
 return x + y;
 }
 
// SyntaxError: Function statements require a function name
 </script>

ν•¨μˆ˜ 선언문은 ν‘œν˜„μ‹μ΄ μ•„λ‹Œ 문이닀. κ·ΈλŸ¬λ―€λ‘œ λ³€μˆ˜μ— ν• λ‹Ήν•  수 μ—†λ‹€.
ν•¨μˆ˜ 선언문을 λ³€μˆ˜μ— 할당해보면 할당이 λ˜λŠ”κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ λ©”λͺ¨λ¦¬μƒμœΌλ‘œ κ·Έλ ‡μ§€μ•Šλ‹€.

  • ν•¨μˆ˜ ν‘œν˜„μ‹
    ν•¨μˆ˜λŠ” 일급 κ°μ²΄μ΄λ―€λ‘œ ν•¨μˆ˜ λ¦¬ν„°λŸ΄λ‘œ μƒμ„±ν•œ ν•¨μˆ˜ 객체λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλ‹€.
    μ΄λŸ¬ν•œ ν•¨μˆ˜ μ •μ˜ 방식을 ν•¨μˆ˜ ν‘œν˜„μ‹(function expression)이라 ν•œλ‹€.
    ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ˜ ν•¨μˆ˜ 이름은 μƒλž΅ν•  수 μžˆλ‹€.
    이름을 μƒλž΅ν•œ ν•¨μˆ˜λŠ” 읡λͺ… ν•¨μˆ˜λΌκ³  λΆˆλ¦°λ‹€.
    ν‘œν˜„μ‹μ˜ ν•¨μˆ˜ λ¦¬ν„°λŸ΄μ€ ν•¨μˆ˜ 이름을 μƒλž΅ν•˜λŠ” 것이 μΌλ°˜μ μ΄λΌκ³ ν•œλ‹€.
    ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ μ •μ˜ν•œ ν•¨μˆ˜λŠ” ν•¨μˆ˜ ν‘œν˜„μ‹ 이전에 호좜 λΆˆκ°€λŠ₯ν•˜λ‹€.

    <script>
    //ν•¨μˆ˜ μ„ μ–Έλ¬Έ
    function add (x,y){
    return x + y;
    }
    
    //ν•¨μˆ˜ ν‘œν˜„μ‹
    var sub = function (x,y) {
    	return x - y;
    };
    </script>
  • function μƒμ„±μž ν•¨μˆ˜
    function μƒμ„±μž ν•¨μˆ˜λ‘œ ν•¨μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” 방식은 μΌλ°˜μ μ΄μ§€ μ•ŠμœΌλ©° λ°”λžŒμ§ν•˜μ§€λ„ μ•Šλ‹€κ³ ν•œλ‹€.

  • ν™”μ‚΄ν‘œ ν•¨μˆ˜(ES6)
    졜근 μžλ°”μŠ€ν¬λ¦½νŠΈ 문법을 μ ‘ν•΄λ³Έμ‚¬λžŒμ€ const result = () => {}λ₯Ό ν•œλ²ˆμ΄λΌλ„ 접해봀을것이닀.

    μ΄λ¦„μ—μ„œλ„ μœ μΆ”ν•  수 μžˆλ“―μ΄ function ν‚€μ›Œλ“œ λŒ€μ‹  ν™”μ‚΄ν‘œ => λ₯Ό μ‚¬μš©ν•΄ μ’€ 더 κ°„λž΅ν•œ λ°©λ²•μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  수 μžˆλ‹€.ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” 항상 읡λͺ… ν•¨μˆ˜λ‘œ μ •μ˜ν•œλ‹€.
    ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” μƒμ„±μž ν•¨μˆ˜λ‘œ μ‚¬μš©ν•  수 μ—†μœΌλ©°, κΈ°μ‘΄ ν•¨μˆ˜μ™€ this바인딩 방식이 λ‹€λ₯΄κ³ ,prototype ν”„λ‘œνΌν‹°κ°€ μ—†μœΌλ©° arguments 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€κ³ ν•œλ‹€.

<script>
 //ν™”μ‚΄ν‘œ ν•¨μˆ˜
 const result = (x,y) => x+y;
 
 //ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” μ•„λž˜ ν‘œν˜„μ‹μ„ μ’€ 더 κ°„λž΅ν•˜κ²Œ μ„ μ–Έν•œ 것.
 const result = function result(x,y){
 return x + y ;
 }
</script>

πŸ“Œλ‹€μ–‘ν•œ ν•¨μˆ˜ ν˜•νƒœ

  • μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜

    • 읡λͺ… μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜

    • κΈ°λͺ… μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜

μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λŠ” ν•¨μˆ˜ 이름이 μ—†λŠ” 읡λͺ… ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.
ν•¨μˆ˜ 이름이 μžˆλŠ” κΈ°λͺ… μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ„ μ‚¬μš©ν•  수 μžˆλ‹€.
ν•˜μ§€λ§Œ κ·Έλ£Ή μ—°μ‚°μž ( ) λ‚΄μ˜ κΈ°λͺ… ν•¨μˆ˜λŠ” ν•¨μˆ˜ 선언문이 μ•„λ‹ˆλΌ ν•¨μˆ˜ λ¦¬ν„°λŸ΄
둜 ν‰κ°€λ˜λ©° ν•¨μˆ˜ 이름은 ν•¨μˆ˜ λͺΈμ²΄μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλŠ” μ‹λ³„μžμ΄λ―€λ‘œ μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•  수 λŠ” μ—†λ‹€.

πŸ’­ 9μ£Όμ°¨ 이해 μ•ˆλ˜λŠ” λ‚΄μš©

μ½œλ°±ν•¨μˆ˜

콜백 ν•¨μˆ˜ λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ 책에 κΈ°μž¬λ˜μ–΄μžˆλŠ” λ‚΄μš©μœΌλ‘œλŠ” 개인적으둜
이해가 λ˜μ§€μ•Šμ•˜λ‹€.
λ°”λ‘œ ꡬ글에 κ²€μƒ‰ν•΄μ„œ λ‚˜μ˜ μˆ˜μ€€μ— λ§žλŠ” 정말 μΉœμ ˆν•˜κ³  μž¬μΉ˜μžˆλŠ” 글을 μ ‘ν•˜κ²Œ λ˜μ—ˆλ‹€.

즉 νŒŒλΌλ―Έν„°κ°’μ„ ν•¨μˆ˜μ²˜λŸΌ ν˜ΈμΆœν•˜λ©΄ 그게 μ½œλ°±ν•¨μˆ˜κ°€ λ˜λŠ”κ±°μ•„λ‹Œκ°€ ?
μ›λ¦¬λŠ” μ΄ν•΄ν•œκ²ƒκ°™λ‹€ λ§žλ‚˜?...

κ·Έλ‚˜μ €λ‚˜ μ½œλ°±ν•¨μˆ˜λŠ” μ™œ μ‚¬μš©ν•˜λŠ”κ±ΈκΉŒ?

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ½”λ“œλ₯Ό μœ„μ—μ„œ μ•„λž˜λ‘œ 순차적으둜 μ‹€ν–‰ν•œλ‹€.
κ·ΈλŸ¬λ‚˜, μ½”λ“œκ°€ λ‹€λ₯Έ ν–‰μœ„κ°€ μΌμ–΄λ‚œ 뒀에 μ‹€ν–‰λ˜λŠ” κ²½μš°λ„ 있고 순차적으둜 μ‹€ν–‰λ˜μ§€ μ•Šμ„ λ•Œλ„ μžˆλ‹€. 이런걸 비동기 ν”„λ‘œκ·Έλž˜λ°μ΄λΌκ³  ν•œλ‹€.

μ½œλ°±μ€ νƒœμŠ€ν¬κ°€ λλ‚˜κΈ° 전에 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ” 것을 보μž₯ν•œλ‹€.
λ‹€λ₯΄κ²Œ λ§ν•˜μžλ©΄ μ½œλ°±μ€ κ·Έ νƒœμŠ€ν¬κ°€ λλ‚œ 직후에 싀행될 것이닀. μ½œλ°±μ€ 비동기 μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ ν•΄μ£Όκ³  μ—¬λŸ¬ λ¬Έμ œμ™€ μ—λŸ¬λ“€λ‘œλΆ€ν„° μ•ˆμ „ν•˜κ²Œ μ§€μΌœμ€€λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 콜백 ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” 방법은 μ–΄λ–€ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λ‘œμ¨ ν•¨μˆ˜λ₯Ό λ„˜κΈ°κ³  μ–΄λ–€ ν–‰μœ„λ‚˜ νƒœμŠ€ν¬κ°€ μ™„λ£Œλœ 직후에 콜백 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 것이닀.

μš”μ•½ν•˜μžλ©΄ 비동기 λ°©μ‹μœΌλ‘œ μž‘μ„±λœ ν•¨μˆ˜λ₯Ό 동기 처리 ν•˜κΈ°μœ„ν•΄ μ‚¬μš©ν•œλ‹€κ³ ν•œλ‹€.

사싀 μ§€κΈˆλ„ λ‚΄κ°€ μ΄ν•΄ν•œκ²Œ λ§žλŠ”κ±΄κ°€ μ‹Άλ‹€.
λΆ€μ—°μ„€λͺ…이 κ°€λŠ₯ν•˜μ‹ λΆ„μ€ λŒ“κΈ€λ‘œ μ„€λͺ…ν•΄μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€πŸ₯²

πŸ₯„ μ†Œκ° ν•œμŠ€ν‘Ό..

μ΅œμ‹ λ¬Έλ²•μ— κ°μ‚¬ν•˜μž..

πŸ‘πŸ»Reference

μ½œλ°±ν•¨μˆ˜κ°€ μ™œ μ“°μ΄λŠ”κ±°μ§€?

μž¬ν˜•λ‹˜ 벨둜그

profile
β˜„οΈ

0개의 λŒ“κΈ€