μνμμ κΈ°μν νλ‘κ·Έλλ° ν¨λ¬λ€μ, μμ ν¨μ
μ΄μ μ μμ±νλ κΈ°μ‘΄μ μ¬κ³ λ°©μμ κΉ¨λΆμλ ν¨μν μ¬κ³ ν¬μ€ν
μ μ΄μ΄, μ΄λ² ν¬μ€ν
μμλ ν¨μν νλ‘κ·Έλλ°μ΄ μ§ν₯νλ κ΄μ μ μ€μ νλ‘κ·Έλ¨μ ꡬννκΈ° μν΄ μκ³ μμ΄μΌνλ νμμ μΈ κ°λ
μ€ νλμΈ μμ ν¨μ(Pure functions)
μ λν μ΄μΌκΈ°λ₯Ό ν΄λ³ΌκΉ νλ€.
2017λ
μ―€, ν¨μν νλ‘κ·Έλλ°μ΄λΌλ ν¨λ¬λ€μμ΄ λ μ€λ₯΄λ©΄μ μμ ν¨μλΌλ κ°λ
λν ν¨κ» μ£Όλͺ©λ°κΈ° μμνκ³ , μ§κΈλ ꡬκΈμ μμ ν¨μ
λΌκ³ κ²μνλ©΄ λ§μ κ°λ°μ λΆλ€μ΄ μμ ν¨μμ νΉμ§μ λν ν¬μ€ν
μ μμ±ν΄λμ κ²μ λ³Ό μ μλ€.
μΌλ°μ μΌλ‘ μ°λ¦¬κ° μμ ν¨μμ λν΄μ 곡λΆνλ €κ³ νλ©΄ λ€μκ³Ό κ°μ λ κ°μ§ νΉμ§μ κ°μ§λ ν¨μλΌκ³ μ μνλ κ²½μ°λ₯Ό λ§μ΄ λ³Ό μ μλ€.
- λμΌν μΈν(μΈμ)μλ νμ λμΌν κ²°κ³Όλ₯Ό λ΄μΌνλ€.
- ν¨μ μΈλΆμ μνλ₯Ό λ³κ²½νκ±°λ, μΈλΆμ μνμ μν₯μ λ°μμλ μλλ€.
κ·Έλ¬λ μ΄λ κ² κ³΅λΆνκ² λλ©΄ βμμ ν¨μλ μ΄λ°μ λ° νΉμ§μ κ°μ§κ³ μλ ν¨μβλΌκ³ μΈμ°κ² λκΈ° μ¬μ΄λ°, μ¬μ€ μμ ν¨μλ μ΄λ κ² μ κ·Όν νμκ° μλ, λ μ¬νν κ°λ μ΄λ€.
λ κ·Έλ₯ μ΄λ κ²λ§ μΈμλλ μμ ν¨μκ° μ΄λ€ κ²μΈμ§ μ΄ν΄νκ³ μ¬μ©νλ λ°λ μ ν λ¬΄λ¦¬κ° μμ§λ§, νμλ μμ ν¨μμ μ΄λ¬ν νΉμ§μ΄ μ΄λμ λμ¨ κ²μΈμ§, μμ ν¨μλΌλ κ²μ΄ μ ννκ² λ¬΄μμ μλ―Ένλμ§μ λν΄ μ‘°κΈ λ κ·Όλ³Έμ μΈ μ΄μΌκΈ°λ₯Ό ν΄λ³΄λ €κ³ νλ€.
μμ ν¨μλ κ·Έλ₯ μνμ ν¨μλ€
μ°λ¦¬κ° μμ ν¨μλΌκ³ μ΄λ¦μ λΆνκ³ μμ ν¨μμ νΉμ§μ μ΄λ¬μ΄λ¬ν κ²λ€μ΄ μλ€κ³ 곡λΆνκΈ° λλ¬Έμ λκ° νΉλ³ν ν¨μμΈ κ² κ°μ§λ§, μ¬μ€ μμ ν¨μλ κ·Έλ₯ μνμμ μ¬μ©νλ ν¨μλ₯Ό νλ‘κ·Έλλ°μ μΈκ³μ λκ°μ΄ ꡬνν΄λμ κ²μ λΆκ³Όνλ€.
μν€ λ°±κ³Όμ ν¨μν νλ‘κ·Έλλ°μ μ μλ₯Ό 보면 μ΄ κ°λ μ λν΄ μ‘°κΈ λ μμΈνκ² μμ±λ μ€λͺ μ λ³Ό μ μλ€.
ν¨μν νλ‘κ·Έλλ°(functional programming)μ μλ£ μ²λ¦¬λ₯Ό μνμ ν¨μμ κ³μ°μΌλ‘ μ·¨κΈνκ³ μνμ κ°λ³ λ°μ΄ν°λ₯Ό λ©λ¦¬νλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ νλμ΄λ€. λͺ λ Ήν νλ‘κ·Έλλ°μμλ μνλ₯Ό λ°κΎΈλ κ²μ κ°μ‘°νλ κ²κ³Όλ λ¬λ¦¬, ν¨μν νλ‘κ·Έλλ°μ ν¨μμ μμ©μ κ°μ‘°νλ€.
ν¨μν νλ‘κ·Έλλ° - μν€ λ°±κ³Ό μλ¬Έ λ§ν¬
μ΄ μ€λͺ
μμ κ°μ₯ μ€μν ν€μλλ λ°λ‘ μνμ ν¨μ
λΌλ λ¨μ΄μ΄λ€. μ°λ¦¬κ° μ΄λ°μ λ° νΉμ§μ μΈμ°λ©° 곡λΆνλ μμ ν¨μλΌλ λ
μμ λ§ κ·Έλλ‘ μμν ν¨μ, μ¦ μνμμ μ¬μ©νλ ν¨μλ₯Ό μλ―Ένλ κ²μ΄λ€.
μ°λ¦¬κ° μνμ μΈκ³μ νλ‘κ·Έλλ°μ μΈκ³μμ λμΌνκ² ν¨μλΌλ κ°λ μ μ¬μ©νκ³ μκΈ° λλ¬Έμ κ°νΉ μμ΄λ²λ¦¬κΈ΄ νμ§λ§, μ¬μ€ νλ‘κ·Έλλ°μμμ ν¨μλ μνμ κ·Έκ²κ³Όλ λ€λ₯Έ μ μ΄ μλΉν λ§λ€.
κ·ΈλΌ μνμ μΈ ν¨μμ νλ‘κ·Έλλ°μ ν¨μ κ° μ°¨μ΄μ μ μμ보기 μν΄, μνμ μΈ ν¨μμ μ μλΆν° λ€μ νλ² νμ€νκ² μ§κ³ λμ΄κ°λλ‘ νμ.
μνμμμ ν¨μ
μ°λ¦¬κ° μ€νμ λ λ°°μ λ ν¨μλΌλ λ μμ λλ΅ λ€μκ³Ό κ°μ μ μλ₯Ό κ°μ§λ κ°λ μ΄λ€.
μμμ μ λνμ¬ κ·Έμ λμνλ κ° μ μΌνκ² μ‘΄μ¬νλ λμ κ΄κ³
μνμ΄λΌλ νλ¬Έ νΉμ μ μ΄λ €μ 보μ΄λ λ¬Έλ²μ μ¬μ©νκΈ΄ νμ§λ§ λ―μ΄λ³΄λ©΄ λ³ κ±° μλ€. μ΄ μ μμμ λ±μ₯νλ λ μ μμ, λ μΉμμ΄λΌκ³ νλ©°, κ°κ° μ μμμ ν¨μμ input
, μΉμμ ν¨μμ output
μ μ¬μ©λ μ μλ κ°μ μ§ν©μ΄λΌκ³ μκ°νλ©΄ λλ€.
μ¦, μ μμμ ν¨μμ μΈμλ‘ μ¬μ©λλ κ°λ€, μΉμμ ν¨μμ κ²°κ³Όλ¬Όλ‘ μ¬μ©λλ κ°λ€μ΄λΌλ λ»μ΄λΌκ³ λ΄λ 무방νλ€.
νμ§λ§ μ΄ μ μμμ κ°μ₯ μ€μν κ²μ μ μμμ΄λ μΉμμ΄λ νλ κ°λ
μ΄ μλλΌ, ν¨μμ μΈμλ‘ μ¬μ©λλ κ° νλμ λμνλ ν¨μμ κ²°κ³Ό κ°μ΄ μ μΌνκ² μ‘΄μ¬νλ€
λΌλ κ°λ
μ΄λ€.
μ΄λ€ κ°μ ν¨μμ λμ§λ©΄ λ°λμ νλμ κ°μ λ°ννλ κ², μ΄κ²μ΄ λ³Έλ ν¨μμ μ μλ€.
오른쪽 그림처럼 정의역의 원소에 대응하는 치역의 원소가 없거나 2개 이상인 경우는
함수의 정의에서 벗어나게 된다
μ‘°κΈ λ νΈν μ΄ν΄λ₯Ό μν΄ μΈμλ‘ λ°μ κ°μ 2λ₯Ό κ³±νλ κ°λ¨ν ν¨μλ₯Ό μκ°ν΄λ³΄μ. μ°λ¦¬λ μ΄λ° ν¨μλ₯Ό μ μν λ μ κ°μ μμΌλ‘ λνλΈλ€.
μ΄μ μ΄ ν¨μμ μΈμμΈ λ₯Ό 1μ΄λΌκ³ μκ°ν΄λ³΄λ©΄ μ°λ¦¬λ λΌλ κ²°κ³Όλ₯Ό μ»μ μ μλ€. λ§μ½ μ΄λ λ κ°μκΈ° μ΄ λμ΄λ²λ¦°λ€λ©΄, μ΄ ν¨μλ νΉμ ν μ μμμ μμμ λ§λμλλ μΉμμ μμκ° μ μΌνμ§ μμΌλ―λ‘ λ μ΄μ ν¨μλΌκ³ λΆλ₯Ό μ μλ κ²μ΄λ€.
μΌλ°μ μΌλ‘ μ΄μΌκΈ°νλ μμ ν¨μμ νΉμ§λ€μ λ°λ‘ μ΄λ¬ν μνμ ν¨μμ μ±μ§μμ κΈ°μνλ€.
νλ‘κ·Έλλ°μμμ ν¨μ
κ·Έλ¬λ νλ‘κ·Έλλ°μμμ ν¨μμλ μ΄λ¬ν μ μ½μ΄ μ ν μλ€. μ΄λ° μ λ° μμλ₯Ό λ€ κ²λ μμ΄, μ΄λ€ κ°λ λ°ννμ§ μλ void
ν ν¨μκ° μμ§ μμκ°?
function foo (x): void {
const y = x * 2;
}
console.log(foo(1));
undefined
μνμ μΈ ν¨μμ μ μλ‘ λΉμΆ°λ³Ό λ μ΄λ¬ν void
ν ν¨μλ ν¨μκ° μλλ€. μ μμμ μμμΈ x
μ λ§λμνλ μΉμμ μμκ° μκΈ° λλ¬Έμ΄λ€. κ·Έλμ νλ‘κ·Έλλ°μμμ ν¨μλΌλ κ°λ
μ΄ μνμ ν¨μμ μ½κ° λ€λ₯΄λ€κ³ μ΄μΌκΈ°νλ κ²μ΄λ€.
μ¬μ€ νλ‘κ·Έλλ°μ ν¨μλ μνμ ν¨μμμ βμ΄λ€ κ°μ λμ Έμ£Όλ©΄ λκ°λ₯Ό κ³μ°νλ€βλΌλ κ°λ λ§ λ€κ³ μ¨ κ²μ λΆκ³Όνλ©°, μνμ μΈ κ΄μ μμ λ°λΌλ³΄λ©΄ νλ‘κ·Έλλ°μ ν¨μλ μ¬μ€ ν¨μκ° μλ κ²½μ°κ° λ λ§λ€.
무μλ³΄λ€ μνμ ν¨μμ νλ‘κ·Έλλ°μμμ ν¨μκ° κ°μ₯ ν° μ°¨μ΄λ₯Ό 보μ΄λ μ μ λ°λ‘ ν¨μμ λμμ΄ μΌκ΄λμ§ μμ μ μλ€λ κ²μ΄λ€.
μκΉ μμλ‘ λ€μλ λΌλ μνμ ν¨μλ λ΄λΆ ꡬνμ΄ μ΄λ»κ² λμ΄μλ νμ λ‘ 1μ λ°μΌλ©΄ 2λ₯Ό λ±μ΄λ΄λ κ²μ΄ 보μ₯λμ΄ μμ§λ§, νλ‘κ·Έλλ°μμλ κ·Έλ μ§ μμ ν¨μλ μΌλ§λ μ§ λ§λ€μ΄ λΌ μ μλ€.
μλ₯Ό λ€λ©΄ Math.random
μ΄λΌλκ°, Date.prototype.getTime
κ³Ό κ°μ λ©μλλ€μ μ¬μ©ν ν¨μ κ°μ κ²λ€ λ§μ΄λ€. μ΄ λ©μλλ€μ ν¨μμ λμκ³Ό μ ν μκ΄μλ κ°μ λ§λ€μ΄λ΄κΈ° λλ¬Έμ, ν¨μμ μ°μ°μ΄ μ΄λ¬ν κ°λ€μ μ’
μλμ΄ λ²λ¦°λ€λ©΄ κ°λ°μλ μ΄ ν¨μκ° μ΄λ€ κ°μ λ±μ΄λΌ μ§ μ λ μμΈ‘ν μκ° μλ€.
function sum (x: number): number {
return x + Math.random();
}
sum(1);
sum(1);
sum(1);
5 // ?
4 // ?
9 // ?
μ΄λ° κ°λ μ νΉμ ν μλ―Έλ₯Ό κ°μ§λ κ°λ€μ μ μ₯, ν λΉ, νΈμΆν μ μλ νλ‘κ·Έλλ°μ μΈκ³μμλ§ μ‘΄μ¬νλ κ²λ€μ΄λ©°, μνμ μΈκ³μμλ μ΄λ° κ°λ μμ²΄κ° μλ€.
μ΄λ κ² νΉμ ν μλ―Έλ₯Ό κ°μ§λ κ°λ€μ μ°λ¦¬λ μν(State)
λΌκ³ λΆλ₯Έλ€. μνλ νλ‘κ·Έλ¨μ νμ¬ μν©μ 보μ¬μ£Όλ μ’μ μν λ νμ§λ§, μ¬κΈ°μ κΈ°μ 무λΆλ³νκ² μ΄ μνλ₯Ό μ°Έμ‘°νκ±°λ λ³κ²½νλ κ²½μ°, κ°λ°μμ‘°μ°¨ νμ¬ νλ‘κ·Έλ¨μ΄ μ΄λ»κ² λμκ°λμ§ νμ
νκΈ° νλ μ¬ν μν©μ΄ λ°μν μλ μλ€.
κ·Έλμ κ°λ°μλ€μ μνλ₯Ό λ³κ²½νλ νμμ νΉμ ν κ·μΉκ³Ό μ μ½μ μ ν΄μ 무λΆλ³ν μν λ³νλ₯Ό μ΅λν νΌνκ³ , μ΄λ° λ³νλ₯Ό μΆμ ν μ μλ μν©μ μ νΈνλ€.
λ¬Έμ λ νλ‘κ·Έλλ°μμμ ν¨μλ μ΄λ° μνλ€, λ μ νν μ΄μΌκΈ°νμλ©΄ ν¨μ μΈλΆμ μν
λ€κ³Ό λκ° μΈμ½μ΄ μκΈ°λ κ²½μ°κ° λ§λ€λ κ²μ΄λ€. μ¬κΈ° μΈμλ‘ λ°μ μλ₯Ό ν¨μ μΈλΆμ μ μΈλ λ³μμ λν ν λ°ννλ addState
λΌλ κ°λ¨ν ν¨μκ° μλ€.
let state = 3;
function addState (x: number): number {
return state + x;
}
addState(1);
4
addState
ν¨μλ μμ μΈλΆμ μλ state
λΌλ κ°μ μ°Έμ‘°νμ¬ μμ μ΄ μΈμλ‘ λ°μ μλ₯Ό λν΄μ£Όλ κ°λ¨ν μΌμ νλ€.
μ¦, μ΄ ν¨μμ κ²°κ³Ό κ°μ ν¨μμ μΈλΆ μνμΈ state
λ³μμ μ’
μλμ΄ μλ€λ κ²μ΄λ©°, μ΄λ° μν©μ κ°λ°μκ° ν¨μμ λμμ μμΈ‘ν μ μκ² λ§λλ μν μμλ‘ μμ©ν μ μλ€.
λ§μ½ λ€λ₯Έ κ³³μμ state
λ³μμ κ°μ λ³κ²½μ΄λΌλ νλ©΄ μν©μ λμ± κΌ¬μ΄κΈ° μμν κ²μ΄λ€.
state = 10;
addState(1);
11
μ΄μ κ³Ό κ°μ ν¨μμ κ°μ μΈμλ₯Ό μ¬μ©νμ§λ§, κ²°κ³Όκ°μ μ ν λ€λ₯΄κ² λμλ€. μ΄ ν¨μλ μΈλΆ μνμ λ³νμ λ°λΌ μμ μ κ²°κ³Ό κ°λ λ³κ²½λκΈ° λλ¬Έμ, κ°λ°μλ μ΄ ν¨μμ λμμ μ ν μμΈ‘ν μ μλ κ²μ΄λ€.
μ΄λ κ² ν¨μκ° ν¨μ μΈλΆ μνμ μν₯μ λ°κ±°λ, ν¨μ μΈλΆ μνλ₯Ό μ§μ λ³κ²½νλ νμλ₯Ό μ¬μ΄λ μ΄ννΈ(Side Effect)
λΌκ³ νλ©°, μ¬μ΄λ μ΄ννΈλ₯Ό λ°μμν€λ ν¨μλ κ°λ°μκ° μμΈ‘νμ§ λͺ»ν λ²κ·Έλ₯Ό λ°μμν€λ μν μμ μ€ νλμ΄λ€.
κ·Έλ° μ΄μ λ‘ μλ°μ€ν¬λ¦½νΈμ κ°μ μΈμ΄μμλ μ μ λ³μμ μ μΈ λ° ν λΉμ μ΅λν μ§μνλ 컨벀μ
μ λ΄λκΈ°λ νλ©°, React Hooksμμλ μ¬μ΄λ μ΄ννΈλ₯Ό λ°μμν€λ λμμ λ°λ‘ ꡬλΆνκΈ° μν΄ useEffect
λΌλ ν
μ μ 곡νκΈ°λ νλ€.
function TestComponent () {
useEffect(() => {
localStorage.setItem('greeting', 'Hi');
return () => {
localStorage.removeItme('greeting');
};
});
return <div>TestComponent</div>;
}
μ§κΈ μ΄κ² κ°λ¨ν ν¨μμΈλ°λ€κ° μλμ μΌλ‘ μ°μΆν μν©μ΄λΌ λΆμμ°μ€λ¬μ λ³΄μΌ μλ μμ§λ§, μ€μ μ΄ν리μΌμ΄μ μλ μ΄κ±°λ³΄λ€ ν¨μ¬ 볡μ‘νκ³ μ΄μν μ§λ€μ νλ ν¨μκ° μλ룩νλ€.
μλ₯Ό λ€λ©΄ API μλ²μ ν΅μ ν κ²°κ³Όλ¬Όμ λ±μ΄λ΄λ κ°λ¨ν ν¨μ λν μμνμ§ μμ ν¨μμ μΌμ’ μ΄λ€.
async function getUsers () {
try {
const response = await fetch('/api/users');
return response.json();
}
catch (e) {
throw e;
}
}
λ± λ΄λ getUsers
λ νΈμΆν λλ§λ€ νμ κ°μ κ°μ λ°ννλ ν¨μλ μλλ€. νμ¬ λ°μ΄ν°λ² μ΄μ€μ μνμ λ°λΌ μ μ 리μ€νΈλ λ§€λ² λ¬λΌμ§ μ μκΈ° λλ¬Έμ΄λ€.
μ΄λ κ² μμνμ§ μμ ν¨μλ κ°λ°μκ° ν¨μμ κ²°κ³Όλ₯Ό μμΈ‘νλ κ²μ΄ λΆκ°λ₯νκΈ° λλ¬Έμ, ν¨μμ λμμ κ²μ¬νλ ν μ€νΈλ₯Ό μμ±νλ κ² λν λΆκ°λ₯νλ€. μ μ΄μ μμνμΌλ‘ λ λ΄λ³΄λΌ μ§λ κ°μ΄ μμ€λ λ³λμ€λ¬μ΄ λ μμ μ΄λ€ κΈ°μ€μΌλ‘ κ²μ¬νλ¨ λ§μΈκ°?
μ΄λ λ― νλ‘κ·Έλλ°μ μΈκ³μμ μ΄μΌκΈ°νλ ν¨μλ μνμ ν¨μλ³΄λ€ λ λ³μκ° λ§κ³ , κ²°κ³Όλ₯Ό μμΈ‘νκΈ°κ° νλ κ°λ μ΄λ€.
μμν μνμ ν¨μλ‘ νκ·νμ
μ, μ΄μ μνμ μΈκ³μμ λ§νλ ν¨μμ νλ‘κ·Έλλ°μ μΈκ³μμ λ§νλ ν¨μμ μ°¨μ΄λ₯Ό μ΄ν΄λ³΄μμΌλ, λ€μ μμ ν¨μμ μ μλ₯Ό κ°μ Έμ보μ.
- λμΌν μΈν(μΈμ)μλ νμ λμΌν κ²°κ³Όλ₯Ό λ΄μΌνλ€.
- ν¨μ μΈλΆμ μνλ₯Ό λ³κ²½νκ±°λ, μΈλΆμ μνμ μν₯μ λ°μμλ μλλ€.
μμ μ΄μΌκΈ° νλ―μ΄, μνμ μΈκ³μμ ν¨μλ λ¨μν μΈνμ λ°μΌλ©΄ λκ° κ³μ°μ ν΄μ λ¨ νλμ κ²°κ³Όλ₯Ό λ΄λ κ°λ μ΄λ€.
κ·Έλ¦¬κ³ μνμ μΈκ³μλ λκ° κ°μ μ μ₯ν΄λκ³ ν λΉλ νκ³ νΈμΆν μλ μλ μνλΌλ κ°λ μ΄ μμΌλ, ν¨μκ° ν¨μ μΈλΆ μνμ μν₯μ μ£Όκ³ λ°λ μ¬μ΄λ μ΄ννΈλΌλ κ²λ λΉμ°ν μ‘΄μ¬ν μκ° μλ€.
μ¦, μνμμμ ν¨μλ₯Ό νλ‘κ·Έλλ°μ κ·Έλλ‘ μ μ©νλ©΄ μμν ν¨μμ νΉμ±μΈ βν¨μμ κ²°κ³Όλ ν¨μμ μΈμμλ§ μν₯μ λ°λλ€βλΌλ 쑰건과 βν¨μ μΈλΆμ μνλ₯Ό λ³κ²½νκ±°λ μν₯μ λ°μμ μλλ€βλΌλ μ‘°κ±΄μ΄ μμ°μ€λ½κ² μΆ©μ‘±λλ κ²μ΄λ€.
κ·Έλ¦¬κ³ ν¨μν νλ‘κ·Έλλ°μμ μ΄μΌκΈ°νλ λΆλ³μ±(immutable)
λν μνκ³Ό λ§λΏμ μλ μ§μ μΈλ°, μ μ΄μ μνλΌλ κ°λ
μ΄ μ‘΄μ¬νμ§ μλ μνμ ν¨μλ₯Ό νλ‘κ·Έλλ°μΌλ‘ ꡬνν μμ ν¨μλ₯Ό μ¬μ©νκ³ μμΌλ, μνλ₯Ό λ³κ²½νλ€λ κ°λ
λν μμ΄μΌ νλ κ²μ΄λ€.
νμ§λ§ νλ‘κ·Έλλ°μ μΈκ³μλ μμ°ν μνλΌλ κ°λ μ΄ μ‘΄μ¬νκΈ° λλ¬Έμ, βν¨μμ μΈμλ₯Ό μ§μ μμ ν΄μλ μλλ€βμ κ°μ μ μ½λ€μ μ€μ€λ‘ μ μνκ³ μ§μΌλκ° μ μλλ‘ μ λ° κ°λ μ λͺ μμ μΌλ‘ μ΄μΌκΈ°νλ κ²μ΄λ€.
λν μμ ν¨μλ₯Ό μ¬μ©ν¨μΌλ‘μ¨ λ°λΌμ€λ μ₯μ λ€μΈ βν μ€νΈκ° μ¬μμ§λ€β, βμ°Έμ‘° ν¬λͺ μ±μ΄ 보μ₯λλ€βμ κ°μ μ΄μΌκΈ°λ€λ μνμ μΈ κ°λ μμμ ν¨μλ₯Ό μκ°νλ©΄ μ¬μ€ λΉμ°νκΈ° κ·Έμ§ μλ μ΄μΌκΈ°λ€μ΄λ€.
μμ μ κΉ μ΄μΌκΈ° νμ§λ§, λ§€λ² λ€λ₯Έ κ°μ΄ λμ€λ ν¨μμ λν μ λ ν μ€νΈλ₯Ό μ§ λ€κ³ μκ°ν΄λ³΄λ©΄ μ§μ§ λ΅μ΄ μλ€. μ μ΄μ κ°λ°μκ° ν¨μμ λμμ μμΈ‘ν μ μμΌλ ν¨μμ λμμ λν λͺ¨λ² λ΅μμ μ μν μλ μμ κ²μ΄κ³ , λΉμ°ν ν μ€νΈ μμ±λ λΆκ°λ₯ νλ€.
λν μμ ν¨μλ₯Ό μ¬μ©νλ©΄ μ°Έμ‘° ν¬λͺ
μ±μ΄ 보μ₯λλ€λ λ§λ κ²°κ΅ μ°λ¦¬κ° μνμμ μ¬μ©νκ³ μλ =
κΈ°νΈμ μλ―Έλ₯Ό μκ°ν΄λ³΄λ©΄ κ·Έλ κ² νΉλ³ν λ§μ΄ μλλ€.
κ³μ° κ²°κ³Όκ° λ³νμ§ μλλ€λ κ²μ μλ―Ένλλ°, μ μ΄μ μ°λ¦¬λ μμ λΆν° μνμμ κ·Έ κ°λ μ μ¬μ©νκ³ μμλ€
μ΄λ λ― μμ ν¨μλ μ΄λ€ μΈμλ₯Ό μ¬μ©νμ λ μ΄λ€ κ²°κ³Ό κ°μ΄ λμ¬ μ§ λμμ μμΈ‘ν μ μκ³ , μνλΌλ κ²μ μμ μμ λ²λ¦° κ°λ μ΄κΈ° λλ¬Έμ, κ°λ°μκ° μμΈ‘ κ°λ₯ν μ΄ν리μΌμ΄μ μ κ°λ°νκΈ° μ½κ² λ§λ€μ΄μ€λ€.
λν ν¨μ μμ²΄κ° ν¨μ μΈλΆμ μνμ κ΄κ³ μμ΄ μμνκ² λ¨μΌν μ°μ°μλ§ μ§μ€νκ³ μμΌλ, ν μ΄ν리μΌμ΄μ
μμ μ μΈν μμ ν¨μλ λ€λ₯Έ μ΄ν리μΌμ΄μ
μλ€κ° κ°μ Έλ€ λΆνλ λ°λμ λμΌν λμμ νλ€λ κ²μ΄ 보μ₯λλ€. μ¦, μ’μ λͺ¨λνμ 쑰건 μ€ νλμΈ λμ μμ§λ
μλ λΆν©νλ€.
μ΄λ κ² μμ ν¨μλ₯Ό μ¬μ©νμ¬ μμ±λ μ΄ν리μΌμ΄μ μ κ°λ°μκ° κ΅¬μ‘°μ λμμ μ½κ² μ΄ν΄ν μ μκΈ° λλ¬Έμ, κ΅³μ΄ ν¨μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄ μλλλΌλ μ λ°μ μΈ μ΄ν리μΌμ΄μ μ€κ³μ κ½€λ λμμ΄ λλ κ°λ μ΄λΌκ³ ν μ μλ€.
λ§μΉλ©°
νμλ μ²μ μμ ν¨μλΌλ κ°λ μ μ νμ λ ꡬκΈλ§κ³Ό λ€λ₯Έ λΆλ€μ΄ μμ±ν΄μ£Όμ ν¬μ€ν λ€μ ν΅ν΄ μμ ν¨μμ νΉμ§, μ₯μ , λ¨μ λ±μ λ¨Όμ μ νκ² λμλλ°, λΉμμλ βλ μλ‘κ² κ³΅λΆν κ² λμꡬλ§βμ΄λΌλ μκ°μ΄μλ€.
μ¬μ€ μμ ν¨μμ κ°μ ν¨λ¬λ€μμ μ²μ μ νκ² λλ©΄ μ΅κ΄μ²λΌ ꡬκΈλ§μ ν΅ν΄ μ 보λ₯Ό μ΅λνκ³ κ³΅λΆλ₯Ό νκ² λλλ°, μ΄λ μΌλ°μ μΌλ‘ λ€λ₯Έ μ¬λλ€μ΄ μ 리ν΄λμ ν¬μ€ν μ λ³΄κ³ κ³΅λΆνκ² λλ κ²½μ°κ° λ§μλ€.
κ·Έλ¬λ μ΄λ κ² κ³΅λΆλ₯Ό νλ κ²½μ°, ν΄λΉ ν¨λ¬λ€μμ κ·Όλ³Έμ μΈ λ°μ μ΄μ λ μ리μ λν΄μ κΉμ΄ νμ νκΈ° 보λ€λ λͺ κ°μ§ νΉμ§μ΄λ μ₯λ¨μ μ λ¨Όμ νμ΅νκ² λλ κ²½μ°κ° λ§μλ κ² κ°λ€.
κ·Έλμ μμ ν¨μλ βμλ‘κ² κ³΅λΆν΄μΌνλ κ²βμ΄λΌλ λλμΌλ‘ λ°μλ€μμμ§λ§, λμ€μ κ³°κ³°ν μκ°ν΄λ³΄λ κ·Έλ₯ μ΄λ¦΄ λ λ°°μ λ μνμ μΈ ν¨μμ κ°λ μ κ·Έλλ‘ νλ‘κ·Έλλ°μΌλ‘ ꡬνν κ²μ΄λΌλ κ°λ μ΄λΌλ κ²μ κΉ¨λ«κ³ κ½€λ ν무νλ κΈ°μ΅μ΄ μλ€.
κ·Έλμ νμλ μ΄ ν¬μ€ν μμ βμμ ν¨μλ μ΄λ°μ λ° νΉμ§μ κ°μ§ ν¨μβλΌκ³ μ€λͺ νμ§ μμλ κ²μ΄λ€. κ°μΈμ μΈ μκ°μ΄κΈ°λ νμ§λ§, λλΆλΆμ μ¬λλ€μ μ΄λ¦΄ λ μ΄λ―Έ νκ΅μμ ν¨μμ λν μ μμ κ°λ μ νμ΅νκΈ° λλ¬Έμ, βμνμ μΈ ν¨μβλΌλ ν€μλλ‘ μ κ·Όνλ κ²μ΄ μ€νλ € μ΄ν΄κ° λΉ λ₯Ό κ²μ΄λΌκ³ μκ°νλ€.
μ΄μ¨λ νμλ μ΄ ν¬μ€ν μ ν΅ν΄ μμ ν¨μλ μ ν μλ‘μ΄ κ°λ μ΄ μλλΌλ μ΄μΌκΈ°λ₯Ό νκ³ μΆμκ³ , λνλ―Όκ΅ μ무 κ΅μ‘μ λ°μ μ¬λμ΄λΌλ©΄ λꡬλ μ§ λ€ μ΅μνκ² λ°μλ€μΌ μ μλ κ°λ μ΄λΌλ κ²μ μ΄μΌκΈ°νκ³ μΆμλ€.
λ¬Όλ‘ μμ ν¨μλ₯Ό μ¬μ©νμ¬ μ΄λ€ μμΌλ‘ νλ‘κ·Έλ¨μ μ€κ³νλ κ²μ΄ νλ₯ν μ€κ³μΈμ§μ κ°μ μ΄μΌκΈ°λ μ무 κ΅μ‘κ³Όμ μ μκΈ° λλ¬Έμ λ³λλ‘ κ³΅λΆλ₯Ό ν΄μΌκ² μ§λ§, μ μ΄λ ν¨μν νλ‘κ·Έλλ°μμ μ€μν ν€μλλ‘ μ΄μΌκΈ°νκ³ μλ μμ ν¨μ
μ λΆλ³μ±
μ λν μ΄ν΄ μ λλ κ·Έλ κ² μ΄λ €μ΄ κ²μ μλ κ²μ΄λΌκ³ μκ°νλ€.
λ€μ ν¬μ€ν
μμλ μμ ν¨μμ ν¨κ» ν¨μν νλ‘κ·Έλλ°μμ μ€μν κ°λ
μ€ νλμΈ λΆλ³μ±
μ λν μ΄μΌκΈ°λ₯Ό ν΄λ³΄λ €κ³ νλ€.
μ΄μμΌλ‘ μνμμ κΈ°μν νλ‘κ·Έλλ° ν¨λ¬λ€μ, μμ ν¨μ ν¬μ€ν μ λ§μΉλ€.
- ν¨μν νλ‘κ·Έλλ°
- Functional Programming
- μμ ν¨μ
- μ¬μ΄λ μ΄ννΈ
- Pure Functions
- Side Effects
κ΄λ ¨ ν¬μ€ν 보λ¬κ°κΈ°
λ³νμ§ μλ μνλ₯Ό μ μ§νλ λ°©λ², λΆλ³μ±(Immutable)
[λ²μ] νλ‘κ·Έλλ¨Έλ₯Ό μν μΉ΄ν κ³ λ¦¬ μ΄λ‘ - 10. μμ° λ³ν
[λ²μ] νλ‘κ·Έλλ¨Έλ₯Ό μν μΉ΄ν κ³ λ¦¬ μ΄λ‘ - 9. ν¨μ νμ
[λ²μ] νλ‘κ·Έλλ¨Έλ₯Ό μν μΉ΄ν κ³ λ¦¬ μ΄λ‘ - 8. νν°μ νΉμ±
[λ²μ] νλ‘κ·Έλλ¨Έλ₯Ό μν μΉ΄ν κ³ λ¦¬ μ΄λ‘ - 7. νν°