[JavaScript] ν•¨μˆ˜

λ°•μ„Έμ§„Β·2024λ…„ 3μ›” 29일
0

JavaScript

λͺ©λ‘ 보기
6/11
post-thumbnail

πŸ€ ν•¨μˆ˜ (Function)

: μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ 블둝을 μ •μ˜

βœ” ν•¨μˆ˜ μž₯점

  1. μž¬μ‚¬μš©μ„± - λ™μΌν•œ μž‘μ—…μ„ λ°˜λ³΅ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ½”λ“œλ₯Ό μž¬ν™œμš©
  2. λͺ¨λ“ˆν™” - μ½”λ“œλ₯Ό μž‘μ€ λͺ¨λ“ˆλ‘œ λΆ„ν• ν•˜μ—¬ κ΅¬μ‘°ν™”ν•˜κ³ , μœ μ‚¬ν•œ κΈ°λŠ₯을 κ°€μ§„ ν•¨μˆ˜λ“€μ„ λ¬Άμ–΄ 관리
  3. 가독성 - ν•¨μˆ˜λŠ” λͺ…ν™•ν•œ κΈ°λŠ₯을 λ‹΄λ‹Ήν•˜κ³  이름을 λΆ€μ—¬ν•˜μ—¬ μ½”λ“œλ₯Ό 읽기 μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€.
  4. μœ μ§€ λ³΄μˆ˜μ„± - μ½”λ“œλ₯Ό ν•¨μˆ˜ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μˆ˜μ •μ΄ μš©μ΄ν•˜κ³ , κ΄€λ ¨ κΈ°λŠ₯을 μˆ˜μ •ν•  λ•Œ λ‹€λ₯Έ 뢀뢄에 영ν–₯을 쀄이며 μœ μ§€ λ³΄μˆ˜κ°€ 쉬움
  5. 디버깅 - 각 ν•¨μˆ˜λŠ” λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈλ˜λ―€λ‘œ μ½”λ“œλ₯Ό λ””λ²„κΉ…ν•˜κΈ° 더 쉬움
  6. μ½”λ“œ μž¬κ΅¬μ‘°ν™” - ν•¨μˆ˜λŠ” μ½”λ“œλ₯Ό μ‰½κ²Œ μž¬μ‘°λ¦½ν•˜κ³  μž¬κ΅¬μ„±ν•  수 μžˆλ„λ‘ λ„μ™€μ€Œ

βœ” ν•¨μˆ˜ ν‘œν˜„ 방법

⚫ ν•¨μˆ˜ 선언식(Function Declaration)
function ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό μ„ μ–Έ

function greet(name) {
    return "Hello, " + name + "!";
}

⚫ ν•¨μˆ˜ ν‘œν˜„μ‹(Function Expression)
λ³€μˆ˜μ— ν•¨μˆ˜λ₯Ό ν• λ‹Ήν•˜λŠ” 방식

var greet = function(name) {
    return "Hello, " + name + "!";
};

⚫ ν™”μ‚΄ν‘œ ν•¨μˆ˜(Arrow Function)
κ°„κ²°ν•œ λ¬Έλ²•μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 방식

var greet = (name) => "Hello, " + name + "!";

🌱 ν•¨μˆ˜ (function)

  • ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심적인 κ΅¬μ„±μš”μ†Œ
  • νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ±°λ‚˜ 값을 κ³„μ‚°ν•˜κΈ° μœ„ν•œ μ½”λ“œ λΈ”λŸ­
  • 순수 ν•¨μˆ˜ / 일급 ν•¨μˆ˜λ‘œ ꡬ뢄

순수 ν•¨μˆ˜(Pure Functions)

: μž…λ ₯값에 λŒ€ν•΄ 항상 λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λ©°, λΆ€μž‘μš©(side effect)이 μ—†λŠ” ν•¨μˆ˜
λΆ€μž‘μš© = ν•¨μˆ˜ μ™ΈλΆ€μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ λ‹€λ₯Έ μ™ΈλΆ€ μƒνƒœμ— μ˜μ‘΄ν•˜λŠ” 것

def add(a, b):                 # 순수 ν•¨μˆ˜
    return a + b

순수 ν•¨μˆ˜μ˜ μž₯점

  • 결정적 (Deterministic) λ™μž‘

  • λΆ€μž‘μš© (Side Effects)이 μ—†λŠ” μ½”λ”©

  • ν•¨μˆ˜λ₯Ό λ‹€λ£¨λŠ”λ° μžˆμ–΄ λ³€μˆ˜μ™€ λ™μΌν•˜κ²Œ λ‹€λ£¨λŠ” 방식
    ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ή
    ν•¨μˆ˜λ₯Ό λ‹€λ₯Έ ν•¨μˆ˜μ— 전달
    ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό λ°˜ν™˜

일급 ν•¨μˆ˜ (First-Class Functions)

: ν•¨μˆ˜λ₯Ό λ‹€λ£¨λŠ”λ° μžˆμ–΄μ„œ λ³€μˆ˜μ™€ λ™μΌν•˜κ²Œ λ‹€λ£¨λŠ” 방식

  • ν•¨μˆ˜λ₯Ό λ‹€λ₯Έ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš© κ°€λŠ₯, ν•¨μˆ˜κ°€ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ κ°€λŠ₯, λ³€μˆ˜μ—λ„ ν• λ‹Ή κ°€λŠ₯
  • ν•¨μˆ˜λ₯Ό μœ μ—°ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯
def apply_operation(operation, x, y):      #일급 ν•¨μˆ˜
    return operation(x, y)
def add(a, b):
    return a + b
def multiply(a, b):
    return a * b
result1 = apply_operation(add, 3, 4)       # add ν•¨μˆ˜λ₯Ό 전달
result2 = apply_operation(multiply, 3, 4)  # multiply ν•¨μˆ˜λ₯Ό 전달
print(result1)                             # 좜λ ₯: 7
print(result2)                             # 좜λ ₯: 12

콜백 ν•¨μˆ˜λ₯Ό μ΄μš©ν•œ 비동기 ν”„λ‘œκ·Έλž˜λ°

  • 콜백 ν•¨μˆ˜λ₯Ό λ„˜κ²¨ μ‚¬μš©ν•  λ•Œ Callback Hell에 빠질 수 있기 λ•Œλ¬Έμ— μ£Όμ˜ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό 함

λ°°μ—΄ λ©”μ†Œλ“œμ™€ 콜백 ν•¨μˆ˜

  • 일급 ν•¨μˆ˜μ˜ κ°œλ…μ„ ν™œμš©
  • 각 μ›μ†Œμ— λŒ€ν•΄ μ‹€ν–‰ν•  ν•¨μˆ˜λ₯Ό 인자둜 λ°›μŒ

ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

  • ν•¨μˆ˜κ°€ λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 있음
  • νŠΉμ • 데이터λ₯Ό μ™ΈλΆ€λ‘œλΆ€ν„° 보호
  • λ…μžμ μΈ 흐름을 가짐

πŸ”” ν•¨μˆ˜ μ»΄ν¬μ§€μ…˜

: 두 ν•¨μˆ˜λ₯Ό μ‘°ν•©ν•˜μ—¬ μƒˆλ‘œμš΄ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜

0개의 λŒ“κΈ€