The

Factories

and

Classes

sat10am - JavaScript Study

@godori

🏭

Factory

🏭

πŸ“¦

πŸ“¦

πŸ“¦

곡μž₯μ—μ„œ μƒν’ˆμ„ μƒμ‚°ν•˜λ“―μ΄ Β λΉ„μŠ·ν•œ 객체λ₯Ό μ°μ–΄λ‚΄λŠ” νŒ¨ν„΄

잠깐! νŒ©ν† λ¦¬ νŒ¨ν„΄κ³Ό 관련이 κΉŠμ€

ν…œν”Œλ¦Ώ λ©”μ†Œλ“œ νŒ¨ν„΄ 에 λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ΄…μ‹œλ‹€.

Template Method Pattern

Abstract

Concrete

μ€‘μš”ν•œ λΌˆλŒ€ κ²°μ •

좔상 λ©”μ†Œλ“œμ˜ κ΅¬ν˜„μ€ ν•˜μœ„ν΄λž˜μŠ€μ—κ²Œ 맑김

μƒμœ„ν΄λž˜μŠ€μ—μ„œ 상속받은 μΆ”μƒλ©”μ†Œλ“œμ˜ ꡬ체적인 λ‚΄μš©μ„ κ²°μ •

μƒμœ„ 클래슀

ν•˜μœ„ 클래슀

ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„!

NoodleRecipe

makeNoodle()

boilWater()

putNoodle()

Example

NoodleRecipe

Ramen

Bibimmyeon

makeNoodle()

boilWater()

putNoodle()

boilWater()

putNoodle()

addEgg()

boilWater()

putNoodle()

λ©΄κ³Ό 달걀을 같이 넣을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

Factory Method Pattern

Factory

Product

Framework

create()

create()

makeProduct()

registerProduct()

πŸ“¦

create()둜 Productλ₯Ό λ§Œλ“€κ³ ,

λ‹€μŒ 좔상 λ©”μ†Œλ“œμ˜ κ΅¬ν˜„μ€ ν•˜μœ„ν΄λž˜μŠ€μ—μ„œ ν•©λ‹ˆλ‹€

makeProduct()

registerProduct()

Factory

pizzaFactory

Product

pizza

Framework

pizza

πŸ•

create

create

πŸ“¦

makeProduct()

registerProduct()

selectTopping()

create()

makeProduct()

registerProduct()

ν”Όμž λ ˆμ‹œν”Όλ§Œμ˜ λ””ν…ŒμΌ

Factory

chickenFactory

Product

chicken

chicken

Framework

πŸ—

πŸ“¦

create

create

makeProduct()

registerProduct()

chooseBanBan()

create()

makeProduct()

registerProduct()

μΉ˜ν‚¨ λ ˆμ‹œν”Όλ§Œμ˜ λ””ν…ŒμΌ

Simple Factory

Factory Method

Abstract Factory

3μ’…λ₯˜μ˜ κ°œλ…μ μΈ νŒ©ν† λ¦¬ νŒ¨ν„΄

Simple Factory

λ‹¨μˆœ νŒ©ν† λ¦¬ νŒ¨ν„΄μ΄λž€

λ‹€λ₯Έ 객체λ₯Ό μƒμ„±ν•˜λŠ” 객체λ₯Ό μΊ‘μŠν™”ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€.

λ‹¨μˆœ Factory Pattern λ§ŒμœΌλ‘œλ„ κ½€ μ“Έλ§Œν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 쒀더 μœ μš©ν•˜κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€!

Factory Method Pattern

νŒ©ν† λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄μ—μ„œλŠ” λ©”μ†Œλ“œ ν•˜λ‚˜λ₯Ό μ •μ˜ν•˜κ³ ,

ν•˜μœ„ν΄λž˜μŠ€κ°€ 이λ₯Ό μž¬μ •μ˜ ν•©λ‹ˆλ‹€.

Abstract Factory Method Pattern

ꡬ체적인 ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ 

μ„œλ‘œ μ—°κ΄€λ˜κ±°λ‚˜ 의쑴적인 κ°μ²΄λ“€μ˜ 쑰합을 λ§Œλ“œλŠ”

μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€.

각각의 재료λ₯Ό λ¦¬ν„΄ν•˜λŠ” 객체

재료λ₯Ό μ‘°ν•©ν•΄μ„œ 각각

μ‹œμΉ΄κ³  μŠ€νƒ€μΌκ³Ό

μΊ˜λ¦¬ν¬λ‹ˆμ•„ μŠ€νƒ€μΌμ„

λ§Œλ“œλŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

πŸ€”

Constructor Functions

vs

Factory Functions

Β 

ν—·κ°ˆλ €μš”!

Constructor Functions

new ν‚€μ›Œλ“œλ₯Ό ν•¨μˆ˜ μ•žμ— μ“°λ©΄

이 ν•¨μˆ˜λŠ” μƒμ„±μžκ°€ 되고, μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“€μ–΄ λ°˜ν™˜ν•©λ‹ˆλ‹€.

μƒμ„±μžλ‘œ 빈 객체λ₯Ό λ¨Όμ € λ§Œλ“€κ³  ν”„λ‘œνΌν‹°λ₯Ό ν• λ‹Ήν•˜λŠ” μ½”λ“œ

μƒμ„±μžλ₯Ό 톡해 μ΄ˆκΈ°ν™” ν•œ μœ μ €λ₯Ό μƒμ„±ν•˜λ„λ‘ μ½”λ“œ λ¦¬νŒ©ν† λ§

즉, 객체λ₯Ό λ§Œλ“œλŠ” 건 ν•¨μˆ˜μ΄λ©°

μƒμ„±μž(constructor)λž€

객체λ₯Ό λ§Œλ“œλŠ” 역할을 ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

Factory Function

μ—¬κΈ°μ„œ 잠깐

object.assign - μ—¬λŸ¬ 객체λ₯Ό ν•©μ³μ€λ‹ˆλ‹€.

mixin - μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•œ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ, 주둜 λ‹€μ€‘μƒμ†μ˜ λŒ€μ•ˆμœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ 잠깐 2

Object.assign을 μ‚¬μš©ν•˜λŠ” minxin을 μ‘μš©ν•΄μ„œ

νŒ©ν† λ¦¬ λ©”μ†Œλ“œλ₯Ό λ§Œλ“€μ–΄λ΄…μ‹œλ‹€.

Animal νŒ©ν† λ¦¬ λ©”μ†Œλ“œλ‘œ rabbit을 μƒμ„±ν•©λ‹ˆλ‹€.

걷기만 ν•˜λ‹ˆκΉŒ μ‹¬μ‹¬ν•˜μ£ ?

Animal을 톡해 λ§Œλ“€μ–΄μ§„ λ™λ¬Όμ—κ²Œ νŠΉμ • λŠ₯λ ₯을 μ£Όλ €κ³  ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ killλŠ₯λ ₯을 λΆ€μ—¬ν•˜λ €λ©΄

각 κ°μ²΄λ§ˆλ‹€ λͺ¨λ‘ assign을 ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

Animal νŒ©ν† λ¦¬λ‘œ λ§Œλ“€μ–΄μ§„ tiger κ°μ²΄μ—κ²Œ Object.assign을 톡해 kill λŠ₯λ ₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

kill λŠ₯λ ₯을 κ°€μ§€λŠ” Animal을 KillingAnimal νŒ©ν† λ¦¬λ‘œ λ§Œλ“€λ©΄

μ›ν•˜λŠ” λŠ₯λ ₯을 가진 동물을 계속 생성할 수 μžˆμŠ΅λ‹ˆλ‹€!

νŒ©ν† λ¦¬ λ©”μ†Œλ“œλŠ”

μ΄λŸ°μ‹μœΌλ‘œ μ‘μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€

객체λ₯Ό 생성해 λ°˜ν™˜ν•˜λŠ” νŒ©ν† λ¦¬ λ©”μ†Œλ“œλ₯Ό λ§Œλ“€λ©΄

newΒ ν‚€μ›Œλ“œ 없이도

μ›ν•˜λŠ” κΈ°λŠ₯을 가진 μƒˆ 객체λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

So, where is Class?

Factory Pattern

By Eunjeong Ko

Factory Pattern

  • 101
Loading comments...

More from Eunjeong Ko