Design Patterns
μ리λ₯Ό μλ©΄ λΉμ·ν λꡬλ₯Ό λ§λ€ μ μλ€. λꡬλ₯Ό μ¬μ©νλ μ¬λμ΄ λ κ²μΈκ° λꡬλ₯Ό μ΄ν΄νλ μ¬λμ΄ λ κ²μΈκ°.
What is a Pattern?
Proven - ν¨ν΄μ΄λΌλ κ²μ κ²μ¦μ΄ λλ€λ κ²μ΄λ€.
Reusable - μ¬μ¬μ©μ΄ κ°λ₯νλ€. out of the box solution - λ°μ€μμ κΊΌλ΄μ λ°λ‘ μ¬μ©νλ€.
Expressive - ννμ μ΄λ€. λͺ μΉμ΄λ μ΄λ¦μ λ³΄κ³ μ μΆκ° κ°λ₯νλ€. κ³ν(λ°©ν₯μ±)μ΄μ§ μ루μ μ μ£Όλκ²μ μλλ€.
Object Creation Pattern
κ°μ²΄λ₯Ό μμ±ν λ μμ£Ό μ°μ΄λ ν¨ν΄μ λ§νλ€
Modules - κ°μ²΄, ν©μ³μ Έμ λκ°λ₯Ό μ΄λ£¨λκ±Έ λ§νλ€. μμκ±°λ ν°κ±°λ μν©μ λ°λΌμ λ€λ₯΄λ€.
κ°μ²΄ 리ν°λ΄
var module = { someProp: 'hello', someMethod: function () { console.log(this.someProp); } };
μ μ νμ§ μλ μ¬ν
var bankAccount = { balance: 900, deposit: function (amount) { this.balance += amount; }, withdraw: function (amount) { this.balance -= amount; } }; bankAccount.deposit(1000); bankAccount.withdraw(1000); bankAccount.balance = 0; // ?!
Privacy Concerns - μ½λλ₯Ό μ¨κΈ°λ건 μ΄λ ΅λ€. κ·Έλμ μ κ·ΌνκΈ° μ΄λ ΅κ² λ§λ€μ΄μΌ νλ€.
μ΄λ κ² μ¦μμ€νν¨μ IIFEλ₯Ό μ¬μ©νλκ²μ μ¬μ¬μ©μ΄ μ΄λ ΅λ€.
var bankAccount = (function (){ var balance = 900; return { deposit: function (amount) { balance += amount; }, withdraw: function (amount) { balance -= amount; } }; })(); var human1BankAccount = bankAccount(); human1BankAccount.deposit();
κΌ μ¨μΌνλ€λ©΄ λ€μμ€νμ΄μ€ λλ§μ 곡κ°μ λ«μ΄λλλ€. window.VANILLA_CODING = {} ν΄μ 곡κ°μ λ§λ λ€.
ν©ν 리 ν¨μ
function bankAccount (){ var balance = 900; return { deposit: function (amount) { balance += amount; }, withdraw: function (amount) { balance -= amount; } }; } var human1BankAccount = bankAccount(); human1BankAccount.deposit();
ν©ν 리ν¨μλ₯Ό μ κ·Όλͺ»νκ² νκΈ°
(function bankApp () { function bankAccount (){ var balance = 900; return { deposit: function (amount) { balance += amount; }, withdraw: function (amount) { balance -= amount; } }; } var human1BankAccount = bankAccount(); human1BankAccount.deposit(); })();
SingleTons
κ°μ²΄κ° νλλ§ λ§λ€μ΄ μ§λλ‘ νλ€. μ νμ κ±Έμ΄μ€λ€.
var userModule = (function () { var users = []; var userId = 0; return { create: (username, password) => { var user = { id: userId, username, password }; users.push(user); userId++; return user; }, get: (username) => { var targetUser; users.forEach((user) => { if (user.username === username) { targetUser = user; } }); return targetUser; } } })();
var HTTPModule = (function () { var instance = null; return { create: function () { if (!instance) { instance = { get: url => { return $.get(url); }, post: (url, data) => { return $.post(url, data); } }; return instance; } else { return instance; } } } })();
Factory Pattern
function fight() { console.log('μΌμμμμ!!!'); } /* Factory Pattern */ function MyenuriFactory (name) { const m = {}; m.name = name; m.from = 'poor family'; m.cry = function () { console.log('μ¬μ‘ν¨λ―Έλ€..'); }; m.fight = fight; //μΈμ°λ κΈ°λ₯μ΄ μλ€. return m; } function SyemooniFactory (level) { const s = {}; s.level = level; s.speak = function () { console.log('μ κ±° μΉμ...'); }; s.fight = fight; // μΈμ°λ κΈ°λ₯μ΄ μλ€. return s; } const kim = SyemooniFactory(999); const yum = MyenuriFactory('yum');
Mixin - 곡μ νλ€. μ½λλ₯Ό μ¬νμ©νλ ν¨ν΄μ΄λ€. νμ₯μ ν΄μ£ΌκΈ°λ νλ€.
λ³νμμ΄ νμ₯ν΄μ€λ€.
var yum = MyenuriFactory('yum'); function fighterDNAMixin (goodPerson) { goodPerson.fight = function (opponent) { // μ μ μ°μλ€. κ°μ²΄κ° λ€μ΄μ€λꡬλ.'γ ' console.log(opponent.name + '.. μ κ±° μΉμ..'); }; } fighterDNAMixin(yum);
Chaining
publish - subscribe (κ³ λ¦΄λΌ μ 무μ λ€μ΄ μλ€.)
Last updated
Was this helpful?