JavaScript λͺ¨λ μν ν¨ν΄μ ν΅ν΄ μ ν리μΌμ΄μ λμμ κ΄λ¦¬νλ λ°©λ²μ νμν©λλ€. λ€μν ν¨ν΄μ μ₯μ κ³Ό μ¬μ© μκΈ°λ₯Ό μμ보μΈμ.
JavaScript λͺ¨λ μν ν¨ν΄: ν¨κ³Όμ μΈ λμ κ΄λ¦¬
JavaScript κ°λ°μμ μ ν리μΌμ΄μ μνλ₯Ό κ΄λ¦¬νλ κ²μ κ²¬κ³ νκ³ μ μ§λ³΄μ κ°λ₯ν μ ν리μΌμ΄μ μ λ§λλ λ° λ§€μ° μ€μν©λλ€. λͺ¨λμ μ½λμ λ°μ΄ν°λ₯Ό μΊ‘μννλ κ°λ ₯ν λ©μ»€λμ¦μ μ 곡νλ©°, μν κ΄λ¦¬ ν¨ν΄κ³Ό κ²°ν©λ λ μ ν리μΌμ΄μ λμμ μ μ΄νλ ꡬ쑰νλ μ κ·Ό λ°©μμ μ 곡ν©λλ€. μ΄ κΈμμλ λ€μν JavaScript λͺ¨λ μν ν¨ν΄μ νμνκ³ , κ° ν¨ν΄μ μ₯μ , λ¨μ λ° μ μ ν μ¬μ© μ¬λ‘μ λν΄ λ Όμν©λλ€.
λͺ¨λ μνλ 무μμΈκ°?
νΉμ ν¨ν΄μ λν΄ μμΈν μμ보기 μ μ, "λͺ¨λ μν"κ° λ¬΄μμ μλ―Ένλμ§ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. λͺ¨λ μνλ JavaScript λͺ¨λ λ΄μ μΊ‘μνλμ΄ λͺ¨λ ν¨μμ λν μ¬λ¬ νΈμΆμ κ±Έμ³ μ§μλλ λ°μ΄ν°μ λ³μλ₯Ό μλ―Έν©λλ€. μ΄ μνλ λͺ¨λμ νμ¬ μ‘°κ±΄ λλ μνλ₯Ό λνλ΄λ©° ν΄λΉ λμμ μν₯μ λ―ΈμΉ©λλ€.
ν¨μ μ€μ½ν λ΄μμ μ μΈλ λ³μ(ν¨μκ° νΈμΆλ λλ§λ€ μ¬μ€μ λ¨)μ λ¬λ¦¬, λͺ¨λ μνλ λͺ¨λμ΄ λ©λͺ¨λ¦¬μ λ‘λλμ΄ μλ ν μ§μλ©λλ€. μ΄λ‘ μΈν΄ λͺ¨λμ μ ν리μΌμ΄μ μ λ°μ μ€μ , μ¬μ©μ κΈ°λ³Έ μ€μ λλ μκ°μ΄ μ§λ¨μ λ°λΌ μ μ§λμ΄μΌ νλ κΈ°ν λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ λ° μ΄μμ μ λλ€.
λͺ¨λ μν ν¨ν΄μ μ¬μ©νλ μ΄μ ?
λͺ¨λ μν ν¨ν΄μ μ¬μ©νλ©΄ λ€μκ³Ό κ°μ μ΄μ μ΄ μμ΅λλ€:
- μΊ‘μν: λͺ¨λμ μνμ λμμ μΊ‘μννμ¬ λͺ¨λ μΈλΆμμμ μλμΉ μμ μμ μ λ°©μ§ν©λλ€.
- μ μ§λ³΄μμ±: λͺ νν μν κ΄λ¦¬λ μ½λλ₯Ό μ΄ν΄νκ³ λλ²κ·Ένλ©° μ μ§λ³΄μνκΈ° μ½κ² λ§λλλ€.
- μ¬μ¬μ©μ±: λͺ¨λμ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ΄λ λ€λ₯Έ νλ‘μ νΈμμλ μ¬μ¬μ©λ μ μμ΅λλ€.
- ν μ€νΈ μ©μ΄μ±: μ μ μλ λͺ¨λ μνλ λ¨μ ν μ€νΈλ₯Ό μμ±νκΈ° μ½κ² λ§λλλ€.
μΌλ°μ μΈ JavaScript λͺ¨λ μν ν¨ν΄
λͺ κ°μ§ μΌλ°μ μΈ JavaScript λͺ¨λ μν ν¨ν΄μ μ΄ν΄λ³΄κ² μ΅λλ€:
1. μ±κΈν΄ ν¨ν΄
μ±κΈν΄ ν¨ν΄μ ν΄λμ€κ° μ€μ§ νλμ μΈμ€ν΄μ€λ§ κ°λλ‘ λ³΄μ₯νκ³ , μ΄μ λν μ μ μ κ·Ό μ§μ μ μ 곡ν©λλ€. JavaScript λͺ¨λμμλ μ΄κ²μ΄ μ’ μ’ κΈ°λ³Έ λμμ λλ€. λͺ¨λ μμ²΄κ° μ±κΈν΄ μΈμ€ν΄μ€ μν μ ν©λλ€.
μμ:
// counter.js
let count = 0;
const increment = () => {
count++;
return count;
};
const decrement = () => {
count--;
return count;
};
const getCount = () => {
return count;
};
export {
increment,
decrement,
getCount
};
// main.js
import { increment, getCount } from './counter.js';
console.log(increment()); // Output: 1
console.log(increment()); // Output: 2
console.log(getCount()); // Output: 2
μ΄ μμμμ `count` λ³μλ λͺ¨λμ μνμ λλ€. `increment` λλ `decrement`κ° νΈμΆλ λλ§λ€ (μ΄λμμ μν¬νΈλλ κ΄κ³μμ΄) λμΌν `count` λ³μλ₯Ό μμ ν©λλ€. μ΄λ μΉ΄μ΄ν°μ λν λ¨μΌ 곡μ μνλ₯Ό μμ±ν©λλ€.
μ₯μ :
- ꡬννκΈ° κ°λ¨ν©λλ€.
- μνμ λν μ μ μ κ·Ό μ§μ μ μ 곡ν©λλ€.
λ¨μ :
- λͺ¨λ κ°μ κ°ν κ²°ν©μ μ΄λν μ μμ΅λλ€.
- μ μ μνλ ν μ€νΈμ λλ²κΉ μ λ μ΄λ ΅κ² λ§λ€ μ μμ΅λλ€.
μ¬μ© μκΈ°:
- μ ν리μΌμ΄μ μ 체μμ λͺ¨λμ λ¨μΌ 곡μ μΈμ€ν΄μ€κ° νμν λ.
- μ μ κ΅¬μ± μ€μ μ κ΄λ¦¬ν λ.
- λ°μ΄ν° μΊμ±μ μν΄.
2. 리λΉλ§ λͺ¨λ ν¨ν΄
리λΉλ§ λͺ¨λ ν¨ν΄μ μ±κΈν΄ ν¨ν΄μ νμ₯μΌλ‘, λͺ¨λμ λ΄λΆ μνμ λμ μ€ νμν λΆλΆλ§ λͺ μμ μΌλ‘ λ ΈμΆνλ λ° μ€μ μ λ‘λλ€.
μμ:
// calculator.js
const calculator = (() => {
let result = 0;
const add = (x) => {
result += x;
};
const subtract = (x) => {
result -= x;
};
const multiply = (x) => {
result *= x;
};
const divide = (x) => {
if (x === 0) {
throw new Error("Cannot divide by zero");
}
result /= x;
};
const getResult = () => {
return result;
};
const reset = () => {
result = 0;
};
return {
add: add,
subtract: subtract,
multiply: multiply,
divide: divide,
getResult: getResult,
reset: reset
};
})();
export default calculator;
// main.js
import calculator from './calculator.js';
calculator.add(5);
calculator.subtract(2);
console.log(calculator.getResult()); // Output: 3
calculator.reset();
console.log(calculator.getResult()); // Output: 0
μ΄ μμμμ `result` λ³μλ λͺ¨λμ λΉκ³΅κ° μνμ λλ€. `return` λ¬Έμμ λͺ μμ μΌλ‘ λ°νλ ν¨μλ€λ§ μΈλΆ μΈκ³μ λ ΈμΆλ©λλ€. μ΄λ `result` λ³μμ λν μ§μ μ μΈ μ κ·Όμ λ°©μ§νκ³ μΊ‘μνλ₯Ό μ΄μ§ν©λλ€.
μ₯μ :
- μ±κΈν΄ ν¨ν΄μ λΉν΄ ν₯μλ μΊ‘μν.
- λͺ¨λμ κ³΅κ° APIλ₯Ό λͺ ννκ² μ μν©λλ€.
λ¨μ :
- μ±κΈν΄ ν¨ν΄λ³΄λ€ μ½κ° λ μ₯ν©ν μ μμ΅λλ€.
μ¬μ© μκΈ°:
- λͺ¨λμ μ΄λ€ λΆλΆμ λ ΈμΆν μ§ λͺ μμ μΌλ‘ μ μ΄νκ³ μΆμ λ.
- λ΄λΆ ꡬν μΈλΆ μ¬νμ μ¨κ²¨μΌ ν λ.
3. ν©ν 리 ν¨ν΄
ν©ν 리 ν¨ν΄μ ꡬ체μ μΈ ν΄λμ€λ₯Ό μ§μ νμ§ μκ³ κ°μ²΄λ₯Ό μμ±νκΈ° μν μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€. λͺ¨λ λ° μνμ λ§₯λ½μμ ν©ν 리 ν¨μλ μ체μ μΈ λ 립μ μΈ μνλ₯Ό κ°μ§ λͺ¨λμ μ¬λ¬ μΈμ€ν΄μ€λ₯Ό μμ±νλ λ° μ¬μ©λ μ μμ΅λλ€.
μμ:
// createCounter.js
const createCounter = () => {
let count = 0;
const increment = () => {
count++;
return count;
};
const decrement = () => {
count--;
return count;
};
const getCount = () => {
return count;
};
return {
increment,
decrement,
getCount
};
};
export default createCounter;
// main.js
import createCounter from './createCounter.js';
const counter1 = createCounter();
const counter2 = createCounter();
console.log(counter1.increment()); // Output: 1
console.log(counter1.increment()); // Output: 2
console.log(counter2.increment()); // Output: 1
console.log(counter1.getCount()); // Output: 2
console.log(counter2.getCount()); // Output: 1
μ΄ μμμμ `createCounter`λ νΈμΆλ λλ§λ€ μλ‘μ΄ μΉ΄μ΄ν° κ°μ²΄λ₯Ό λ°ννλ ν©ν 리 ν¨μμ λλ€. κ° μΉ΄μ΄ν° κ°μ²΄λ μ체μ μΈ λ 립μ μΈ `count` λ³μ(μν)λ₯Ό κ°μ§λλ€. `counter1`μ μνλ₯Ό μμ ν΄λ `counter2`μ μνμλ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
μ₯μ :
- μ체 μνλ₯Ό κ°μ§ λͺ¨λμ μ¬λ¬ λ 립μ μΈ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
- λμ¨ν κ²°ν©μ μ΄μ§ν©λλ€.
λ¨μ :
- μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν΄ ν©ν 리 ν¨μκ° νμν©λλ€.
μ¬μ© μκΈ°:
- κ°κΈ° λ€λ₯Έ μνλ₯Ό κ°μ§ λͺ¨λμ μ¬λ¬ μΈμ€ν΄μ€κ° νμν λ.
- κ°μ²΄μ μμ±κ³Ό μ¬μ©μ λΆλ¦¬νκ³ μΆμ λ.
4. μν λ¨Έμ ν¨ν΄
μν λ¨Έμ ν¨ν΄μ κ°μ²΄λ μ ν리μΌμ΄μ μ λ€μν μνμ ν΄λΉ μν κ°μ μ νμ κ΄λ¦¬νλ λ° μ¬μ©λ©λλ€. νμ¬ μνμ κΈ°λ°ν 볡μ‘ν λμμ κ΄λ¦¬νλ λ° νΉν μ μ©ν©λλ€.
μμ:
// trafficLight.js
const createTrafficLight = () => {
let state = 'red';
const next = () => {
switch (state) {
case 'red':
state = 'green';
break;
case 'green':
state = 'yellow';
break;
case 'yellow':
state = 'red';
break;
default:
state = 'red';
}
};
const getState = () => {
return state;
};
return {
next,
getState
};
};
export default createTrafficLight;
// main.js
import createTrafficLight from './trafficLight.js';
const trafficLight = createTrafficLight();
console.log(trafficLight.getState()); // Output: red
trafficLight.next();
console.log(trafficLight.getState()); // Output: green
trafficLight.next();
console.log(trafficLight.getState()); // Output: yellow
trafficLight.next();
console.log(trafficLight.getState()); // Output: red
μ΄ μμμμ `state` λ³μλ μ νΈλ±μ νμ¬ μνλ₯Ό λνλ λλ€. `next` ν¨μλ νμ¬ μνμ λ°λΌ μ νΈλ±μ λ€μ μνλ‘ μ νν©λλ€. μν μ νμ `next` ν¨μ λ΄μ λͺ μμ μΌλ‘ μ μλ©λλ€.
μ₯μ :
- 볡μ‘ν μν μ νμ κ΄λ¦¬νλ ꡬ쑰νλ λ°©λ²μ μ 곡ν©λλ€.
- μ½λλ₯Ό λ μ½κΈ° μ½κ³ μ μ§λ³΄μνκΈ° μ½κ² λ§λλλ€.
λ¨μ :
- λ κ°λ¨ν μν κ΄λ¦¬ κΈ°μ λ³΄λ€ κ΅¬ννκΈ° λ 볡μ‘ν μ μμ΅λλ€.
μ¬μ© μκΈ°:
- μ νν μμ μνμ μ μ μλ μν μ νμ κ°μ§ κ°μ²΄λ μ ν리μΌμ΄μ μ΄ μμ λ.
- λ€μν μνλ₯Ό κ°μ§ μ¬μ©μ μΈν°νμ΄μ€(μ: λ‘λ©, νμ±, μ€λ₯)λ₯Ό κ΄λ¦¬ν λ.
- κ²μ λ‘μ§μ ꡬνν λ.
5. ν΄λ‘μ λ₯Ό μ¬μ©νμ¬ λΉκ³΅κ° μν κ΄λ¦¬
ν΄λ‘μ λ₯Ό μ¬μ©νλ©΄ λ΄λΆ ν¨μμ μ€μ½νλ₯Ό νμ©νμ¬ λͺ¨λ λ΄μ λΉκ³΅κ° μνλ₯Ό μμ±ν μ μμ΅λλ€. μΈλΆ ν¨μ λ΄μ μ μΈλ λ³μλ μΈλΆ ν¨μ μ€νμ΄ μλ£λ νμλ λ΄λΆ ν¨μμμ μ κ·Όν μ μμ΅λλ€. μ΄λ μνκ° λ ΈμΆλ ν¨μλ₯Ό ν΅ν΄μλ§ μ κ·Ό κ°λ₯ν μΊ‘μν ννλ₯Ό μμ±ν©λλ€.
μμ:
// bankAccount.js
const createBankAccount = (initialBalance = 0) => {
let balance = initialBalance;
const deposit = (amount) => {
if (amount > 0) {
balance += amount;
return balance;
} else {
return "Invalid deposit amount.";
}
};
const withdraw = (amount) => {
if (amount > 0 && amount <= balance) {
balance -= amount;
return balance;
} else {
return "Insufficient funds or invalid withdrawal amount.";
}
};
const getBalance = () => {
return balance;
};
return {
deposit,
withdraw,
getBalance,
};
};
export default createBankAccount;
// main.js
import createBankAccount from './bankAccount.js';
const account1 = createBankAccount(100);
console.log(account1.getBalance()); // Output: 100
console.log(account1.deposit(50)); // Output: 150
console.log(account1.withdraw(20)); // Output: 130
console.log(account1.withdraw(200)); // Output: Insufficient funds or invalid withdrawal amount.
const account2 = createBankAccount(); // No initial balance
console.log(account2.getBalance()); // Output: 0
μ΄ μμμμ `balance`λ `createBankAccount` ν¨μμ μ΄ ν¨μκ° λ°ννλ ν¨μλ€(`deposit`, `withdraw`, `getBalance`) λ΄μμλ§ μ κ·Ό κ°λ₯ν λΉκ³΅κ° λ³μμ λλ€. λͺ¨λ μΈλΆμμλ μ΄ ν¨μλ€μ ν΅ν΄μλ§ μμ‘κ³Ό μνΈ μμ©ν μ μμ΅λλ€.
μ₯μ :
- λ°μ΄λ μΊ‘μν β λ΄λΆ μνκ° μ§μ μΌλ‘ λΉκ³΅κ°μ λλ€.
- ꡬννκΈ° κ°λ¨ν©λλ€.
λ¨μ :
- λ³μμ μ§μ μ κ·Όνλ κ²λ³΄λ€ μ±λ₯μ΄ μ½κ° λ¨μ΄μ§ μ μμ΅λλ€ (ν΄λ‘μ λλ¬Έ). νμ§λ§ μ΄λ μ’ μ’ λ¬΄μν μ μλ μμ€μ λλ€.
μ¬μ© μκΈ°:
- κ°λ ₯ν μν μΊ‘μνκ° νμν λ.
- λ 립μ μΈ λΉκ³΅κ° μνλ₯Ό κ°μ§ λͺ¨λμ μ¬λ¬ μΈμ€ν΄μ€λ₯Ό μμ±ν΄μΌ ν λ.
λͺ¨λ μν κ΄λ¦¬λ₯Ό μν λͺ¨λ² μ¬λ‘
λͺ¨λ μνλ₯Ό κ΄λ¦¬ν λ μΌλμ λμ΄μΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
- μνλ₯Ό μ΅μν: λͺ¨λμ μνμ νμν λ°μ΄ν°λ§ μ μ₯νμΈμ. μ€λ³΅λκ±°λ νμλ λ°μ΄ν°λ μ μ₯νμ§ λ§μΈμ.
- μμ μ μΈ λ³μ μ΄λ¦ μ¬μ©: μ½λ κ°λ μ±μ λμ΄κΈ° μν΄ μν λ³μμ λͺ ννκ³ μλ―Έ μλ μ΄λ¦μ μ ννμΈμ.
- μν μΊ‘μν: μΊ‘μν κΈ°μ μ μ¬μ©νμ¬ μλμΉ μμ μμ μΌλ‘λΆν° μνλ₯Ό 보νΈνμΈμ.
- μν λ¬Έμν: κ° μν λ³μμ λͺ©μ κ³Ό μ¬μ©λ²μ λͺ ννκ² λ¬ΈμννμΈμ.
- λΆλ³μ± κ³ λ €: κ²½μ°μ λ°λΌ λΆλ³ λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©νλ©΄ μν κ΄λ¦¬λ₯Ό λ¨μννκ³ μμμΉ λͺ»ν λΆμμ©μ λ°©μ§ν μ μμ΅λλ€. Immutable.jsμ κ°μ JavaScript λΌμ΄λΈλ¬λ¦¬κ° μ μ©ν μ μμ΅λλ€.
- μν κ΄λ¦¬ ν μ€νΈ: μνκ° μ¬λ°λ₯΄κ² κ΄λ¦¬λλμ§ νμΈνκΈ° μν΄ λ¨μ ν μ€νΈλ₯Ό μμ±νμΈμ.
- μ¬λ°λ₯Έ ν¨ν΄ μ ν: μ ν리μΌμ΄μ μ νΉμ μꡬ μ¬νμ κ°μ₯ μ ν©ν λͺ¨λ μν ν¨ν΄μ μ ννμΈμ. λΉλ©΄ν μμ μ λ무 볡μ‘ν ν¨ν΄μΌλ‘ μΌμ μ§λμΉκ² 볡μ‘νκ² λ§λ€μ§ λ§μΈμ.
μ μ κ³ λ € μ¬ν
μ μΈκ³ μ¬μ©μλ₯Ό λμμΌλ‘ μ ν리μΌμ΄μ μ κ°λ°ν λ λͺ¨λ μνμ κ΄λ ¨λ λ€μ μ¬νλ€μ κ³ λ €νμΈμ:
- μ§μν: λͺ¨λ μνλ μΈμ΄, ν΅ν, λ μ§ νμκ³Ό κ΄λ ¨λ μ¬μ©μ κΈ°λ³Έ μ€μ μ μ μ₯νλ λ° μ¬μ©λ μ μμ΅λλ€. μ ν리μΌμ΄μ μ΄ μ¬μ©μ λ‘μΌμΌμ λ°λΌ μ΄λ¬ν κΈ°λ³Έ μ€μ μ μ¬λ°λ₯΄κ² μ²λ¦¬νλμ§ νμΈνμΈμ. μλ₯Ό λ€μ΄, μΌν μΉ΄νΈ λͺ¨λμ μνμ ν΅ν μ 보λ₯Ό μ μ₯ν μ μμ΅λλ€.
- μκ°λ: μ ν리μΌμ΄μ μ΄ μκ°μ λ―Όκ°ν λ°μ΄ν°λ₯Ό λ€λ£¬λ€λ©΄ μκ°λλ₯Ό μΌλμ λμΈμ. νμν κ²½μ° λͺ¨λ μνμ μκ°λ μ 보λ₯Ό μ μ₯νκ³ , μ ν리μΌμ΄μ μ΄ λ€λ₯Έ μκ°λ κ°μ μ¬λ°λ₯΄κ² λ³ννλμ§ νμΈνμΈμ.
- μ κ·Όμ±: λͺ¨λ μνκ° μ ν리μΌμ΄μ μ μ κ·Όμ±μ μ΄λ€ μν₯μ λ―ΈμΉ μ μλμ§ κ³ λ €νμΈμ. μλ₯Ό λ€μ΄, μ ν리μΌμ΄μ μ΄ κΈκΌ΄ ν¬κΈ°λ μμ λλΉμ κ΄λ ¨λ μ¬μ©μ κΈ°λ³Έ μ€μ μ μ μ₯νλ κ²½μ°, μ΄λ¬ν κΈ°λ³Έ μ€μ μ΄ μ ν리μΌμ΄μ μ 체μ μΌκ΄λκ² μ μ©λλμ§ νμΈνμΈμ.
- λ°μ΄ν° κ°μΈ μ 보 λ³΄νΈ λ° λ³΄μ: νΉν μ§μ κ·μ (μ: μ λ½μ GDPR, μΊλ¦¬ν¬λμμ CCPA)μ λ°λΌ λ―Όκ°ν μ μλ μ¬μ©μ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λλ λ°μ΄ν° κ°μΈ μ 보 λ³΄νΈ λ° λ³΄μμ κ°λ³ν μ£ΌμνμΈμ. μ μ₯λ λ°μ΄ν°λ₯Ό μ μ νκ² λ³΄νΈνμΈμ.
κ²°λ‘
JavaScript λͺ¨λ μν ν¨ν΄μ ꡬ쑰νλκ³ μ μ§λ³΄μ κ°λ₯ν λ°©μμΌλ‘ μ ν리μΌμ΄μ λμμ κ΄λ¦¬νλ κ°λ ₯ν λ°©λ²μ μ 곡ν©λλ€. λ€μν ν¨ν΄κ³Ό κ·Έ μ₯λ¨μ μ μ΄ν΄ν¨μΌλ‘μ¨ νΉμ μꡬ μ¬νμ λ§λ μ¬λ°λ₯Έ ν¨ν΄μ μ ννκ³ , μ μΈκ³ μ¬μ©μμκ² ν¨κ³Όμ μΌλ‘ μλΉμ€λ₯Ό μ 곡ν μ μλ κ²¬κ³ νκ³ νμ₯ κ°λ₯ν JavaScript μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. λͺ¨λ μν ν¨ν΄μ ꡬνν λ μΊ‘μν, κ°λ μ± λ° ν μ€νΈ μ©μ΄μ±μ μ°μ μνλ κ²μ μμ§ λ§μΈμ.