--- id: P-REINFORCE-WIKI-AFE12564 category: Dev confidence_score: 0.95 tags: ['factory-pattern', 'design-pattern', 'software-architecture-pattern', 'singleton-pattern', 'observer-pattern', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Factory Pattern]] ## πŸ“Œ Brief Summary Factory Pattern(λ˜λŠ” Factory Method)은 μ‹œμŠ€ν…œ μ „μ²΄μ˜ ꡬ쑰λ₯Ό λ‹€λ£¨λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄κ³Ό 달리, μ»΄ν¬λ„ŒνŠΈ λ‚΄μ˜ νŠΉμ •ν•œ 섀계 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 'λ””μžμΈ νŒ¨ν„΄(Design Pattern)'의 ν•œ μ’…λ₯˜μž…λ‹ˆλ‹€ [1, 2]. 제곡된 μ†ŒμŠ€μ—μ„œλŠ” λ””μžμΈ νŒ¨ν„΄κ³Ό μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ„ λΉ„κ΅ν•˜λŠ” κ³Όμ •μ—μ„œ λ‹¨μˆœ μ˜ˆμ‹œλ‘œλ§Œ ν•œμ •μ μœΌλ‘œ μ–ΈκΈ‰λ˜μ–΄ μžˆμ–΄ **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** ## πŸ“– Core Content **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** λ‹€λ§Œ, 제곡된 λ¬Έμ„œμ—μ„œ μΆ”μΆœν•  수 μžˆλŠ” μ΅œμ†Œν•œμ˜ λ§₯락적 μ •λ³΄λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€: * **νŒ¨ν„΄μ˜ μˆ˜μ€€ 및 λ²”μœ„(Level & Scope):** Factory Pattern은 μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄κ³Ό λͺ…ν™•νžˆ κ΅¬λΆ„λ˜λŠ” κ°œλ…μž…λ‹ˆλ‹€. μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ΄ μ‹œμŠ€ν…œ μ „μ²΄μ˜ κ±°μ‹œμ μΈ ꡬ쑰(Macro-level)와 μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ μƒν˜Έμž‘μš©μ„ μ •μ˜ν•˜λŠ” 반면, Factory Pattern을 ν¬ν•¨ν•œ λ””μžμΈ νŒ¨ν„΄μ€ 단일 μ»΄ν¬λ„ŒνŠΈλ‚˜ 클래슀 λ‚΄λΆ€μ˜ λ―Έμ‹œμ μΈ μˆ˜μ€€(Micro-level)μ—μ„œ λ°œμƒν•˜λŠ” 섀계 문제λ₯Ό λ‹€λ£Ήλ‹ˆλ‹€ [1, 2]. * **적용 단계(Time of Application):** μ‹œμŠ€ν…œ λ ˆμ΄μ•„μ›ƒμ„ κ²°μ •ν•˜λŠ” 초기 섀계(Design) 단계가 μ•„λ‹ˆλΌ, μ‹€μ œ μ†Œν”„νŠΈμ›¨μ–΄ 개발의 μ½”λ”©(Coding) λ˜λŠ” λΉŒλ“œ(Building) λ‹¨κ³„μ—μ„œ μ μš©λ©λ‹ˆλ‹€ [1]. * **ν•΄κ²° λͺ©μ (Purpose):** 객체 생성, 클래슀 κ°„μ˜ μƒν˜Έμž‘μš© 및 λ™μž‘κ³Ό 같은 반볡적인 섀계 문제λ₯Ό ν•΄κ²°ν•˜μ—¬ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ λ†’μ΄λŠ” ν‘œμ€€ν™”λœ μ†”λ£¨μ…˜ 역할을 ν•©λ‹ˆλ‹€ [1, 2]. ## βš–οΈ Trade-offs & Caveats **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** (제곡된 μ†ŒμŠ€μ—λŠ” Factory Pattern의 λΆ€μž‘μš©, μ œμ•½ 사항, ν˜Ήμ€ μ΅œμ ν™” 방식에 λŒ€ν•œ ꡬ체적인 λ‚΄μš©μ΄ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.) ## πŸ”— Knowledge Connections ### Related Concepts #### [μ†Œν”„νŠΈμ›¨μ–΄ 섀계 λΆ„λ₯˜ (Software Design Classification)] - [[Design Pattern]] - μ—°κ²° 이유: Factory Pattern은 λͺ…μ‹œμ μœΌλ‘œ λ””μžμΈ νŒ¨ν„΄μ˜ ν•œ μ˜ˆμ‹œλ‘œ λΆ„λ₯˜λ˜λ©°, μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ˜ λŒ€μ‘°κ΅°μœΌλ‘œ μ†Œκ°œλ©λ‹ˆλ‹€ [1, 2]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: κ±°μ‹œμ μΈ μ•„ν‚€ν…μ²˜ ꡬ쑰 λ‚΄λΆ€μ—μ„œ 세뢀적인 μ»΄ν¬λ„ŒνŠΈ κ΅¬ν˜„ μ‹œ μ§λ©΄ν•˜λŠ” 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•˜λŠ”μ§€(μž¬μ‚¬μš©μ„±, 가독성 ν–₯상 λ“±) κ·Έ λͺ©μ μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [2, 3]. - [[Software Architecture Pattern]] - μ—°κ²° 이유: Factory Pattern(λ””μžμΈ νŒ¨ν„΄)κ³Ό 섀계 규λͺ¨(Scale), λ²”μœ„(Scope), 좔상화(Abstraction) μˆ˜μ€€μ—μ„œ λŒ€λΉ„λ˜λŠ” μƒμœ„ κ°œλ…μž…λ‹ˆλ‹€ [1, 2]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: Factory Pattern이 μ‹œμŠ€ν…œ μ „μ²΄μ˜ ν™•μž₯μ„±μ΄λ‚˜ 신뒰성을 κ²°μ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, 이미 μ •ν•΄μ§„ μ•„ν‚€ν…μ²˜(예: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€, κ³„μΈ΅ν˜• λ“±) λ‚΄λΆ€μ˜ μž‘μ€ λ‹¨μœ„μ—μ„œ κ΅¬ν˜„ λ””ν…ŒμΌμ„ λ³΄μ‘°ν•œλ‹€λŠ” 점을 λͺ…ν™•νžˆ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2]. ### Deeper Research Questions **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** (제곡된 λ§₯락 μ•ˆμ—μ„œ λ„μΆœν•  수 μžˆλŠ” μ΅œμ†Œν•œμ˜ 심측 μ§ˆλ¬Έμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.) - μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄(예: κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜ λ˜λŠ” λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€)의 λ‚΄λΆ€ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬ν˜„ν•  λ•Œ Factory Pattern을 μ μš©ν•¨μœΌλ‘œμ¨ 얻을 수 μžˆλŠ” ꡬ체적인 μ½”λ“œ μž¬μ‚¬μš©μ˜ 이점은 무엇인가? - μ†ŒμŠ€μ— μ–ΈκΈ‰λœ λ””μžμΈ νŒ¨ν„΄ μ˜ˆμ‹œλ“€(Factory, Singleton, Observer, Strategy)은 각각 μ–΄λ–€ λ―Έμ‹œμ (Micro-level) 섀계 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλ˜μ—ˆμœΌλ©°, μƒν˜Έ κ°„μ˜ 차이점은 무엇인가? - (기타 μ§ˆλ¬Έμ€ μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.) ### Practical Application Contexts - **Implementation:** Factory Pattern은 μ†Œν”„νŠΈμ›¨μ–΄ 개발의 μ½”λ”©(Coding) λ‹¨κ³„μ—μ„œ κ°œλ³„ λͺ¨λ“ˆμ΄λ‚˜ 클래슀 λ‚΄λΆ€μ˜ κ΅¬ν˜„ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λ„κ΅¬λ‘œ ꡬ체적으둜 μ μš©λ©λ‹ˆλ‹€ [1, 2]. - **System Design:** **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** - **Operation / Maintenance:** **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** - **Learning Path:** **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** - **My Project Relevance:** **μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€.** ### Adjacent Topics - [[Singleton Pattern]] - ν™•μž₯ λ°©ν–₯: μ†ŒμŠ€μ—μ„œ Factory Patternκ³Ό ν•¨κ»˜ λ””μžμΈ νŒ¨ν„΄μ˜ λŒ€ν‘œμ μΈ μ˜ˆμ‹œλ‘œ μ–ΈκΈ‰λ˜μ—ˆμœΌλ©° [1, 2], 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° λ‚΄ 생성 νŒ¨ν„΄(Creational Patterns)의 λ‹€λ₯Έ ν™œμš© 방식을 비ꡐ μ‘°μ‚¬ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€. - [[Observer Pattern]] - ν™•μž₯ λ°©ν–₯: Factory Patternκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ 섀계 문제λ₯Ό λ‹€λ£¨μ§€λ§Œ, 객체 κ°„μ˜ μƒνƒœ λ³€ν™”λ‚˜ ν–‰μœ„(Behavioral) 츑면을 λ‹€λ£¨λŠ” λ””μžμΈ νŒ¨ν„΄ μ‚¬λ‘€λ‘œ ν™•μž₯ν•˜μ—¬ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2]. --- *Last updated: 2026-05-02*