πΈ12μ₯. ν¨μ
β
12.1 ν¨μλ?
λ§€κ°λ³μ(parameter)
: ν¨μ λ΄λΆλ‘ μ λ ₯μ μ λ¬λ°λ λ³μμΈμ(argument)
: μ λ ₯λ°νκ°(return value)
: μΆλ ₯
ν¨μλ₯Ό μ¬μ©νλ μ΄μ
μ½λμ μ¬μ¬μ©
λμΌν μμ μ λ°λ³΅μ μΌλ‘ μννλ μ½λλ₯Ό ν¨μλ‘ λ§λ€μ΄ μ¬μ©νλ κ²μ΄ ν¨μ¨μ μ΄λ€.
μ μ§λ³΄μ νΈμμ± & μ½λμ μ λ’°μ±
κ°μ μ½λμ μ€λ³΅μΌλ‘ μΈν μμ μ 걸리λ μκ°κ³Ό μ¬λμ μ€μλ₯Ό μ΅μ νκ³ μ¬μ¬μ©μ±μ λμΌ μ μλ€.
μ½λμ κ°λ μ±
ν¨μλ κ°μ²΄ νμ μ κ° μ΄λ€. β μ΄λ¦(μλ³μ)λ₯Ό λΆμΌ μ μμ
μ μ ν ν¨μ μ΄λ¦μ ν¨μ λ΄λΆ μ½λλ₯Ό μ΄ν΄νμ§ μκ³ λ ν¨μμ μν μ νμ ν μ μκ² λκ³ , μ΄λ μ½λμ κ°λ μ±μ ν₯μμν¨λ€.
ν¨μ 리ν°λ΄
μ μ½λλ
ν¨μ 리ν°λ΄
μ λ³μμ ν λΉν κ²
ν¨μλ κ°μ²΄(object)λ€.
ν¨μλ μΌλ° κ°μ²΄μλ λ€λ₯΄λ€.
μΌλ° κ°μ²΄λ νΈμΆν μ μμ§λ§, ν¨μλ νΈμΆν μ μλ€.
ν¨μλ ν¨μ κ°μ²΄λ§μ κ³ μ ν νλ‘νΌν°λ₯Ό κ°λλ€.
β
12.2 ν¨μ μ μ
ν¨μ μ μΈλ¬Έ
ν¨μ 리ν°λ΄μ ν¨μ μ΄λ¦μ μλ΅ν μ μμ§λ§, ν¨μ μ μΈλ¬Έμ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€.
ν¨μμ μΈλ¬Έμ
ννμμ΄ μλ λ¬Έ
μ΄λ€. β λ³μμ ν λΉν μ μλ€.
μ½λμ λ¬Έλ§₯μ λ°λ₯Έ μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ ν΄μ
βν¨μ μ μΈλ¬Έμ
ννμμ΄ μλ λ¬Έ
μ΄κ³ , ν¨μ ννμμννμμΈ λ¬Έ
ν¨μ 리ν°λ΄μ΄ λ¨λ μΌλ‘ μ¬μ©λλ κ²½μ° β
ν¨μ μ μΈλ¬Έ
μΌλ‘ ν΄μν¨μ 리ν°λ΄μ΄ κ°μΌλ‘ νκ°λμ΄μΌ νλ(λ³μμ ν λΉ or νΌμ°μ°μλ‘..) λ¬Έλ§₯ β
ν¨μ 리ν°λ΄ ννμ
μΌλ‘ ν΄μ
π§ ν¨μλ ν¨μ μ΄λ¦μΌλ‘ νΈμΆνλ κ²μ΄ μλλΌ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ νΈμΆνλ€.
ν¨μ μ΄λ¦
μ ν¨μ λͺΈμ²΄ λ΄μμλ§ μ°Έμ‘°ν μ μλ μλ³μ
ν¨μ λͺΈμ²΄ μΈλΆμμλ ν¨μ μ΄λ¦μ μ°Έμ‘°ν μ μλ€.
μ¦, ν¨μλ₯Ό κ°λ¦¬ν€λ μλ³μκ° μλ€.
1οΈβ£ ν¨μ 리ν°λ΄ ννμ
μΌλ‘ νΈμΆ μ λ©λͺ¨λ¦¬ ꡬ쑰
2οΈβ£ ν¨μ μ μΈλ¬Έ
μΌλ‘ ν¨μ νΈμΆ μ λ©λͺ¨λ¦¬ ꡬ쑰
μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μΈλ¬Έμ ν΄μν΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€.
μμ±λ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μ ν¨ν μλ³μκ° νμνλ€.
λ°λΌμ, μλ°μ€ν¬λ¦½νΈ μμ§μ μμ±λ ν¨μλ₯Ό νΈμΆνκΈ° μν΄ ν¨μ μ΄λ¦κ³Ό λμΌν μ΄λ¦μ μλ³μλ₯Ό μ묡μ μΌλ‘ μμ±νκ³ , κ±°κΈ°μ ν¨μ κ°μ²΄λ₯Ό ν λΉνλ€.
π‘ κ²°λ‘ μ μΌλ‘, μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ μΈλ¬Έ
μ ν¨μ ννμ
μΌλ‘ λ³ν
β ν¨μ κ°μ²΄λ₯Ό μμ±
ν¨μ ννμ
μλ°μ€ν¬λ¦½νΈ ν¨μλ κ°μ²λΌ λ³μμ ν λΉν μλ μκ³ νλ‘νΌν° κ°μ΄ λ μλ μμΌλ©° λ°°μ΄μ μμκ° λ μλ μλ€. μ΄μ²λΌ κ°μ μ±μ§μ κ°λ κ°μ²΄λ₯Ό
μΌκΈ κ°μ²΄
λΌ νλ€.ν¨μ 리ν°λ΄μ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€. β
μ΅λͺ ν¨μ
ν¨μ μμ± μμ κ³Ό ν¨μ νΈμ΄μ€ν
ν¨μ νΈμ΄μ€ν
: ν¨μ μ μΈλ¬Έμ΄ μ½λμ μ λλ‘ μ¬λ €μ§ κ² μ²λΌ λμνλ μλ°μ€ν¬λ¦½νΈ κ³ μ μ νΉμ§
ν¨μλ₯Ό μ μνλ©΄ λ°νμ μ΄μ μ ν¨μ κ°μ²΄κ° λ¨Όμ μμ±λλ€.
μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μ μ΄λ¦κ³Ό λμΌν μ΄λ¦μ μλ³μλ₯Ό μ묡μ μΌλ‘ μμ±νκ³ μμ±λ ν¨μ κ°μ²΄λ₯Ό ν λΉνλ€.
μ¦, λ°νμμλ μ΄λ―Έ ν¨μ κ°μ²΄κ° μμ±λμ΄ μκ³ ν¨μ μ΄λ¦κ³Ό λμΌν μλ³μμ ν λΉκΉμ§ μλ£λ μνμ΄λ€.
ν¨μ ννμμ λ³μμ ν λΉλλ κ°μ΄ ν¨μ 리ν°λ΄μΈ λ¬Έμ΄λ€.
λ°λΌμ, ν¨μ ννμμ λ³μ μ μΈλ¬Έκ³Ό λ³μ ν λΉλ¬Έμ ν λ²μ κΈ°μ ν μΆμ½ ννκ³Ό λμΌνκ² λμ.
λ³μ ν λΉλ¬Έμ κ°
μ λ°νμ(ν λΉλ¬Έμ΄ μ€νλλ μμ )μ νκ°λλ―λ‘β ν¨μ ννμμ
ν¨μ 리ν°λ΄
λ λ°νμμ νκ°λμ΄ν¨μ κ°μ²΄
κ° λλ€.λ³μ νΈμ΄μ€ν vs ν¨μ νΈμ΄μ€ν 곡ν΅μ
λ°νμ μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ λ¨Όμ μ€νλμ΄ μλ³μλ₯Ό μμ±νλ€. μ°¨μ΄μ
var ν€μλλ‘ μ μΈλ λ³μλ
undefined
λ‘ μ΄κΈ°νν¨μ μ μΈλ¬Έμ ν΅ν΄ μ묡μ μΌλ‘ μμ±λ μλ³μλ
ν¨μ κ°μ²΄
λ‘ μ΄κΈ°ν β ν¨μ μ μΈλ¬Έ μ΄μ μλ νΈμΆ κ°λ₯ feat.νΈμ΄μ€ν
νμ΄ν ν¨μ
function ν€μλ λμ
νμ΄ν β
λ₯Ό μ¬μ©ν΄ ν¨μλ₯Ό μ μΈν μ μλ€.νμ΄ν ν¨μλ νμ μ΅λͺ ν¨μλ‘ μ μνλ€.
β
12.3 ν¨μ νΈμΆ
λ§€κ°λ³μμ μΈμ
ν¨μλ₯Ό μ€ννκΈ° μν΄ νμν κ°μ ν¨μ μΈλΆμμ λ΄λΆλ‘ μ λ¬ν λ,
λ§€κ°λ³μλ₯Ό ν΅ν΄ μΈμλ₯Ό μ λ¬
νλ€.ν¨μκ° νΈμΆλλ©΄ : ν¨μ λͺΈμ²΄ λ΄μμ
μ묡μ μΌλ‘ λ§€κ°λ³μκ° μμ±
λκ³undefinedλ‘ μ΄κΈ°ν
λ μ΄νμΈμκ° μμλλ‘ ν λΉ
λλ€.ν¨μλ 맀겨λ³μμ κ°μμ μΈμ(argument)μ κ°μκ° μΌμΉνμ§ μμλ λλ€.
μΈμ < λ§€κ°λ³μ : λλ¨Έμ§ λ§€κ°λ³μμ λν΄μλ
μ묡μ μΌλ‘ undefined
μΈμ > λ§€κ°λ³μ : λͺ¨λ μΈμλ
μ묡μ μΌλ‘ arguments κ°μ²΄μ νλ‘νΌν°λ‘ 보κ΄
λλ€.
μλ°μ€ν¬λ¦½νΈ λ¬Έλ²μμ λ¬Έμ
λ°λΌμ, ν¨μλ₯Ό μ μν λ μ μ ν μΈμκ° μ λ¬λμλμ§ νμΈν νμκ° μλ€.
typeof
μ°μ°μ μ¬μ©ν΄μ μΈμ νμ κ²μ¬νκΈ°μ μ νμ μ μΈμ΄ κ°λ₯ν
Typescript
μ¬μ©νκΈ°μΈμκ° μ λ¬λμ§ μμ κ²½μ°
λ¨μΆνκ°
λ₯Ό μ¬μ©ν΄ κΈ°λ³Έκ° ν λΉλ§€κ°λ³μμ κΈ°λ³Έκ°(default value)
μ ν λΉνκΈ°β ν¨μ λ΄μμ μννλ μΈμ μ²΄ν¬ λ° μ΄κΈ°ν κ°μνν μ μλ€.
λ°νλ¬Έ
λ°νλ¬Έμ ν¨μμ μ€νμ μ€λ¨νκ³ ν¨μ λͺΈμ²΄λ₯Ό λΉ μ Έλκ°λ€.
λ°νλ¬Έμ return ν€μλ λ€μ μ€λ ννμμ νκ°ν΄ λ°ννλ€.
return ν€μλ λ€μ λ°νκ°μΌλ‘ μ¬μ©ν ννμμ λͺ μνμ§ μμΌλ©΄ undefinedκ° λ°νλλ€.
β
12.4 μ°Έμ‘°μ μν μ λ¬κ³Ό μΈλΆ μνμ λ³κ²½
κ°μ μν νΈμΆκ³Ό μ°Έμ‘°μ μν νΈμΆ
κ°μ μν νΈμΆ(call by value)
: ν¨μ νΈμΆμ λ§€κ°λ³μμμμ κ°(primitive value)μ μ λ¬
μμ νμ μ μΈμ(argument)λ κ° μμ²΄κ° λ³΅μ¬λμ΄ λ§€κ°λ³μμ μ λ¬
ν΄λΉ κ°μ λ³κ²½ν΄λ μλ³Έμ΄ νΌμλμ§ μλλ€. (side effect X)
μ°Έμ‘°μ μν νΈμΆ(call by reference)
: ν¨μ νΈμΆμ λ§€κ°λ³μμκ°μ²΄(object) λ₯Ό μ λ¬
κ°μ²΄ νμ μΈμ(argument) λ μ°Έμ‘° κ°μ΄ 볡μ¬λμ΄ λ§€κ°λ³μμ μ λ¬
μ°Έμ‘° κ°μ ν΅ν΄ μ λ¬ν κ°μ²΄λ₯Ό λ³κ²½ν κ²½μ° μλ³Έμ΄ νΌμλλ€. ( side effect O )
μ°Έμ‘°μ μν νΈμΆμ λ¬Έμ μ
ν΄κ²°λ°©λ² μ€ νλλ κ°μ²΄λ₯Ό λΆλ³ κ°μ²΄(immutable object)λ‘ λ§λ€μ΄ μ¬μ©νλ κ²μ΄λ€.
κ°μ²΄μ 볡μ¬λ³Έμ μλ‘κ² μμ±νλ κ²μ λΉμ©(cost)μ΄ μλ³Έ κ°μ²΄ κ·λͺ¨μ λ°λΌ μ»€μ§ μ μλ€.
νμ§λ§, κ°μ²΄λ₯Ό λ§μΉ μμ κ°μ²λΌ λ³κ²½ λΆκ°λ₯ν κ°μΌλ‘ λμνκ² λ§λ€ μ μλ€.
λ³κ²½μ΄ νμν κ²½μ° :
κΉμ 볡μ¬(deep copy)
λ₯Ό ν΅ν΄ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νκ³ μ¬ν λΉνλ€. (side effect X)
μμν¨μ
μΈλΆ μνλ₯Ό λ³κ²½νμ§ μκ³ μΈλΆμνμ μμ‘΄νμ§λ μλ ν¨μ
μμ ν¨μλ₯Ό ν΅ν΄ side effectλ₯Ό μ΅λν μ΅μ νμ¬ μ€λ₯λ₯Ό νΌνκ³ νλ‘κ·Έλ¨μ μμ μ±μ λμΈλ€. β
ν¨μν νλ‘κ·Έλλ°
β
12.5 λ€μν ν¨μμ νν
μ¦μ μ€ν ν¨μ(IIFE, Immediately Invoked Function Expression)
ν¨μ μ μμ λμμ μ¦μ νΈμΆλλ ν¨μ
μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ μ΄λ€.
λ°λμ κ·Έλ£Ή μ°μ°μ
( ... )
λ‘ κ°μΈμΌ νλ€.
μ¬κ·ν¨μ(recursive function)
μκΈ° μμ μ νΈμΆνλ ν¨μ
ν¨μ μ΄λ¦μ ν¨μ λͺΈμ²΄ λ΄λΆμμλ§ μ ν¨νκΈ° λλ¬Έμ, ν¨μ λ΄λΆμμλ ν¨μ μ΄λ¦μ μ΄μ©ν΄ μκΈ° μμ μ νΈμΆν μ μλ€.
νμΆμ‘°κ±΄
μ λ°λμ λ§λ€μ΄μΌ νλ€. μμΌλ©΄ μ€ν μ€λ²νλ‘ μλ¬ λ°μ
μ€μ²© ν¨μ(nested function) == λ΄λΆ ν¨μ(inner function)
ν¨μ λ΄λΆμ μ μλ ν¨μ
μ€μ²© ν¨μλ μΈλΆ ν¨μ λ΄λΆμμλ§ νΈμΆν μ μλ€.
μΈλΆ ν¨μ(outer function)
: μ€μ²© ν¨μλ₯Ό ν¬ν¨νλ ν¨μ
μ€μ²© ν¨μλ μμ μ ν¬ν¨νλ μΈλΆ ν¨μλ₯Ό λλ
ν¬νΌ ν¨μ(helper function)
μν μ νλ€.
μ½λ°± ν¨μ(callback function)
ν¨μμ λ§€κ°λ³μ(parameter)λ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆλ‘ μ λ¬λλ ν¨μ
μ½λ°± ν¨μλ κ³ μ°¨ ν¨μμ μν΄ νΈμΆλλ€.
κ³ μ°¨ ν¨μ(Higher-Order Function, HOF)
: λ§€κ°λ³μλ₯Ό ν΅ν΄ ν¨μμ μΈλΆμμ μ½λ°± ν¨μλ₯Ό μ λ¬λ°μ ν¨μ
κ³ μ°¨ ν¨μλ νμμ λ°λΌ μ½λ°± ν¨μμ μΈμ(argument)λ₯Ό μ λ¬ν μ μλ€. β κ³ μ°¨ν¨μμ μ½λ°±ν¨μ μ λ¬ μ μ½λ°± ν¨μλ₯Ό νΈμΆνμ§ μκ³ ν¨μ μ체λ₯Ό μ λ¬ν΄μΌ νλ€.
ν¨μλ μΌκΈ κ°μ²΄ μ΄λ―λ‘ ν¨μμ λ§€κ°λ³μλ₯Ό ν΅ν΄ ν¨μλ₯Ό μ λ¬ κ°λ₯ β ν¨μλ λ μ΄μ λ΄λΆλ‘μ§μ κ°λ ₯ν μμ‘΄νμ§ μκ³ μΈλΆμμ λ‘μ§μ μΌλΆλΆμ ν¨μλ‘ μ λ¬λ°μ μννλ―λ‘ μ μ°ν ꡬ쑰λ₯Ό κ°λλ€.
Last updated