π λͺ¨λ κ°λ°μκ° λ§μ€ν°ν΄μΌ ν 10κ°μ§ JavaScript ν¨ν΄
λ μ€λ§νΈνκ³ κΉ¨λνλ©° νμ₯ κ°λ₯ν μ½λλ₯Ό μν κ²μ¦λ JavaScript λμμΈ ν¨ν΄
π λ€μ΄κ°λ©°
JavaScriptλ λ¨μν λΈλΌμ°μ μ€ν¬λ¦½ν μΈμ΄μμ νλ μΉ κ°λ°μ ν΅μ¬μΌλ‘ λ°μ νμ΅λλ€. Node.js, React, Vueμ κ°μ νλ μμν¬λ‘ ꡬλλλ νμ€ν μ ν리μΌμ΄μ κΉμ§, JavaScriptλ μ΄λμλ μμ΅λλ€. νμ§λ§ μ무리 κ³ κΈ λꡬλ₯Ό μ¬μ©νλλΌλ μ½λ κ΅¬μ‘°κ° μμ λλ€.
νΌμ νλ‘μ νΈλ₯Ό μ§ννλ , νμ₯ κ°λ₯ν μΉ μ ν리μΌμ΄μ μμ νκ³Ό νμ νλ , κ²μ¦λ ν¨ν΄μΌλ‘ μ½λλ₯Ό ꡬ쑰ννλ λ°©λ²μ μλ κ²μ μ νμ΄ μλλΌ νμμ λλ€. μ΄λ¬ν ν¨ν΄λ€μ λ¨μν νλ¬Έμ κ°λ μ΄ μλλΌ λ²κ·Έλ₯Ό μ€μ΄κ³ , μ¬μ¬μ©μ±μ λμ΄λ©°, μ½λλ² μ΄μ€λ₯Ό νμ₯νκΈ° μ½κ² λ§λλ μ€μ μ½λ© λ¬Έμ μ ν΄κ²°μ± μ λλ€.
π§ 10κ°μ§ νμ JavaScript ν¨ν΄
1. λͺ¨λ ν¨ν΄ (Module Pattern)
λͺ¨λ ν¨ν΄μ μ½λλ₯Ό λ 립μ μ΄κ³ μΊ‘μνλ λ¨μλ‘ κ΅¬μ±νλ λ° λμμ μ€λλ€. μ μ μν κ΄λ¦¬κ° νΌλμ€λ¬μμ§λ λκ·λͺ¨ μ ν리μΌμ΄μ μμ νΉν μ μ©ν©λλ€.
const Counter = (function() {
let count = 0;
return {
increment: () => ++count,
getCount: () => count,
};
})();
νμν κ²λ§ λ
ΈμΆμν΄μΌλ‘μ¨(increment, getCount) λ΄λΆ λ³μ countλ λΉκ³΅κ°λ‘ μ μ§λ©λλ€. λνΈ ν
μ΄ν λμ λ κ³ λΈλ‘μΌλ‘ 쑰립νλ κ²μ²λΌ λ κΉ¨λνκ³ μμ νλ©° μ¬μ¬μ© κ°λ₯ν©λλ€.
2. κ³΅κ° λͺ¨λ ν¨ν΄ (Revealing Module Pattern)
λͺ¨λ ν¨ν΄μ μ§νλ λ²μ μΌλ‘, λΉκ³΅κ° λΆλΆκ³Ό κ³΅κ° λΆλΆμ λ λͺ ννκ² λΆλ¦¬ν©λλ€.
const User = (function() {
let name = 'Guest';
function setName(newName) {
name = newName;
}
function getName() {
return name;
}
return {
setName,
getName,
};
})();
μ΄ ν¨ν΄μ κ°λ μ±κ³Ό μλλ₯Ό ν₯μμν΅λλ€. μ΄λ€ λ©μλκ° λ ΈμΆλλμ§ μ¦μ μ μ μμ΅λλ€.
3. ν©ν 리 ν¨ν΄ (Factory Pattern)
ν©ν 리 ν¨ν΄μ μΈμ€ν΄μ€νλλ μ νν ν΄λμ€/νμ μ μ νμ μμ΄ κ°μ²΄λ₯Ό μμ±ν©λλ€.
function CarFactory(type) {
const carTypes = {
sedan: () => ({ type: 'Sedan', wheels: 4 }),
truck: () => ({ type: 'Truck', wheels: 6 }),
};
return carTypes[type]?.() || { type: 'Unknown' };
}
μ΄ μ κ·Όλ²μ ν΅ν΄ λ©μΈ μ½λλ² μ΄μ€λ₯Ό if/elseλ switch λ¬ΈμΌλ‘ μ΄μ§λ½νμ§ μκ³ λ κ°μ²΄ μμ± λ‘μ§μ νμ₯ν μ μμ΅λλ€.
4. μ΅μ λ² ν¨ν΄ (Observer Pattern)
React μν κ΄λ¦¬, μ΄λ²€νΈ μμ€ν , pub/sub μν€ν μ²μμ λ§μ΄ μ¬μ©λλ μ΅μ λ² ν¨ν΄μ μ½λμ ν λΆλΆμ΄ λ€λ₯Έ κ³³μ λ³νμ λ°μν μ μκ² ν©λλ€.
class EventObserver {
constructor() {
this.observers = [];
}
subscribe(fn) {
this.observers.push(fn);
}
notify(data) {
this.observers.forEach((fn) => fn(data));
}
}
μ΄ ν¨ν΄μ λΆλ¦¬λ ν΅μ μ μ§μνμ¬ λ³΅μ‘ν UIμ λͺ¨λμ λ‘μ§μ κ΄λ¦¬νκΈ° μ½κ² λ§λλλ€.
5. μ±κΈν€ ν¨ν΄ (Singleton Pattern)
λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄λ μ μ μν κ΄λ¦¬μμ²λΌ μ± μ 체μμ νΉμ κ°μ²΄μ μΈμ€ν΄μ€κ° νλλ§ νμν λ μ±κΈν€ ν¨ν΄μ΄ ꡬμΆν΄μ€λλ€.
const AppState = (function() {
let instance;
function createInstance() {
return { user: null, theme: 'light' };
}
return {
getInstance: function() {
if (!instance) instance = createInstance();
return instance;
},
};
})();
6. μ λ΅ ν¨ν΄ (Strategy Pattern)
μ λ΅ ν¨ν΄μ μκ³ λ¦¬μ¦ ν¨λ°λ¦¬λ₯Ό μ μνκ³ λ°νμμ νλλ₯Ό μ νν μ μκ² ν©λλ€.
const strategies = {
email: (data) => `Sending email to ${data}`,
sms: (data) => `Sending SMS to ${data}`,
};
function sendMessage(strategy, data) {
return strategies[strategy]?.(data) || 'Invalid strategy';
}
7. νλ‘ν νμ ν¨ν΄ (Prototype Pattern)
JavaScript μμ λͺ¨λΈμ ν΅μ¬μλ νλ‘ν νμ ν¨ν΄μ΄ μμ΅λλ€.
function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function() {
return `${this.name} makes a noise.`;
};
μ΄λ μμ±μ ν¨μμ ES6 ν΄λμ€μ κΈ°λ³Έ κ°λ μ λλ€.
8. λͺ λ Ή ν¨ν΄ (Command Pattern)
λͺ λ Ή ν¨ν΄μ μμ²μ κ°μ²΄λ‘ λννμ¬ μ€ν μ·¨μ, λ‘κΉ , μ§μ°λ μ€ν κ°μ κΈ°λ₯μ κ°λ₯νκ² ν©λλ€.
function Command(action, value) {
return {
execute: () => action(value),
};
}
const printCommand = Command(console.log, 'Hello, Command!');
printCommand.execute(); // Hello, Command!
9. λ°μ½λ μ΄ν° ν¨ν΄ (Decorator Pattern)
λ°μ½λ μ΄ν° ν¨ν΄μ μλ³Έ μ½λλ₯Ό μμ νμ§ μκ³ λμ μΌλ‘ μλ‘μ΄ λμμ κ°μ²΄μ μΆκ°ν©λλ€.
function addTimestamp(fn) {
return function(...args) {
console.log('Time:', new Date().toISOString());
return fn(...args);
};
}
const greet = (name) => `Hello, ${name}`;
const timedGreet = addTimestamp(greet);
10. μ± μ μ°μ ν¨ν΄ (Chain of Responsibility Pattern)
μ΄ ν¨ν΄μ μμ²μ νΈλ€λ¬ 체μΈμ λ°λΌ μ λ¬ν μ μκ² ν©λλ€. ν νΈλ€λ¬κ° μμ²μ μ²λ¦¬ν μ μμΌλ©΄ λ€μ νΈλ€λ¬λ‘ μ λ¬ν©λλ€.
function AuthHandler(next) {
return (req) => {
if (!req.user) return 'Auth failed';
return next(req);
};
}
function DataHandler(req) {
return `Welcome ${req.user}`;
}
const handleRequest = AuthHandler(DataHandler);
console.log(handleRequest({ user: 'Nick' }));
Express.jsμμ μ¬μ©λλ λ―Έλ€μ¨μ΄ νμ΄νλΌμΈ ꡬμΆμ λ§€μ° μ μ©ν©λλ€.
π― λ§λ¬΄λ¦¬
JavaScriptλ₯Ό λ§μ€ν°νλ κ²μ λ¨μν λ¬Έλ²μ λ°°μ°λ κ²μ΄ μλλλ€. μ μ§λ³΄μ κ°λ₯νκ³ κΉ¨λνλ©° ννλ ₯ μλ λ°©μμΌλ‘ μ½λλ₯Ό ꡬ쑰ννκ³ νμ₯νλ λ°©λ²μ λ°°μ°λ κ²μ λλ€.
μ΄ 10κ°μ§ ν¨ν΄μ νΈλ λλ μ νμ΄ μλλλ€. μμ μ¬μ΄λ νλ‘μ νΈλΆν° 본격μ μΈ SaaS μ νκΉμ§ λͺ¨λ νλ‘μ νΈμμ μλνλ μμν κ°λ μ λλ€.
κ°μ₯ μ΅κ·Όμ μ¬μ©ν ν¨ν΄μ 무μμ΄κ³ , λ€μμ μλν΄λ³Ό ν¨ν΄μ 무μμΈκ°μ?
π μΆμ²
- μλ¬Έ: 10 JavaScript Patterns Every Developer Should Master
- μμ±μ: Bhagya Rana
- λ°νμΌ: 2025λ 8μ 16μΌ
- νκ·Έ: JavaScript, Web Development, Design Patterns, Frontend, Programming



