--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Factory Pattern]] last_updated: 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]. --- - **Simple Factory**: μž…λ ₯값에 따라 λ‹€λ₯Έ μžμ‹ 객체λ₯Ό μƒμ„±ν•˜μ—¬ 리턴함. - **Factory Method**: 상속을 톡해 μ–΄λ–€ 객체λ₯Ό 생성할지 μ„œλΈŒν΄λž˜μŠ€κ°€ κ²°μ •ν•˜κ²Œ 함. - **Abstract Factory**: μ—°κ΄€λœ κ°μ²΄λ“€μ˜ 'κ΅°(Family)'을 μƒμ„±ν•˜κΈ° μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•¨ (예: 닀크 ν…Œλ§ˆμš© λ²„νŠΌκ³Ό μž…λ ₯μ°½ μ„ΈνŠΈ). - **Core Benefit**: **Decoupling**. `new` ν‚€μ›Œλ“œλ₯Ό ν•œκ³³μ—μ„œ κ΄€λ¦¬ν•˜λ―€λ‘œ, λ‚˜μ€‘μ— κ΅¬ν˜„μ²΄κ°€ λ°”λ€Œμ–΄λ„ μ‚¬μš©ν•˜λŠ” μͺ½ μ½”λ“œλŠ” μ „ν˜€ μˆ˜μ •ν•  ν•„μš”κ°€ μ—†λ‹€. ## βš–οΈ 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* --- - Related: [[Dependency-Injection|Dependency-Injection]] , Abstract-Factory-Pattern - Concept: Encapsulation