--- id: P-REINFORCE-WIKI-D8B40C28 category: "10_Wiki/πŸ’‘ Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['design-pattern', 'software-architecture-pattern', 'creational,-structural,-and-behavioral-patterns', 'software-architecture-pattern', 'anti-patterns', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Design Pattern]] ## πŸ“Œ Brief Summary λ””μžμΈ νŒ¨ν„΄(Design Pattern)은 μ†Œν”„νŠΈμ›¨μ–΄ μ»΄ν¬λ„ŒνŠΈλ‚˜ λͺ¨λ“ˆ λ‚΄μ—μ„œ 반볡적으둜 λ°œμƒν•˜λŠ” 섀계 λ¬Έμ œμ— λŒ€ν•΄ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ†Œκ·œλͺ¨μ˜ ν‘œμ€€ν™”λœ ν•΄κ²°μ±…μž…λ‹ˆλ‹€ [1, 2]. μ΄λŠ” 전체 μ‹œμŠ€ν…œμ˜ κ±°μ‹œμ μΈ ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄κ³Ό 달리, 단일 λͺ¨λ“ˆμ΄λ‚˜ 클래슀 λ‚΄μ˜ λ―Έμ‹œμ μΈ 섀계 κ²°μ •, 개체의 행동 및 관계λ₯Ό λ‹€λ£Ήλ‹ˆλ‹€ [1, 3]. λŒ€ν‘œμ μΈ μ˜ˆλ‘œλŠ” 싱글톀(Singleton), νŒ©ν† λ¦¬(Factory), μ „λž΅(Strategy), μ˜΅μ €λ²„(Observer) νŒ¨ν„΄ 등이 μžˆμŠ΅λ‹ˆλ‹€ [2, 4]. ## πŸ“– Core κΈ°Content * **μ•„ν‚€ν…μ²˜ νŒ¨ν„΄κ³Όμ˜ ꡬ쑰적 차이:** μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ΄ 전체 μ‹œμŠ€ν…œμ˜ κ³ μˆ˜μ€€ ꡬ쑰, μ»΄ν¬λ„ŒνŠΈ 쑰직, μƒν˜Έμž‘μš© 및 μ „λ°˜μ μΈ λ ˆμ΄μ•„μ›ƒμ„ μ •μ˜ν•˜λŠ” 반면, λ””μžμΈ νŒ¨ν„΄μ€ κ°œλ³„ μ»΄ν¬λ„ŒνŠΈλ‚˜ 클래슀 λ‚΄λΆ€μ˜ ꡬ쑰적, ν–‰μœ„μ  츑면에 μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€ [1-3]. 즉, μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ€ λŒ€κ·œλͺ¨ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ‹€λ£¨μ§€λ§Œ, λ””μžμΈ νŒ¨ν„΄μ€ 객체 생성, μƒν˜Έμž‘μš©, 행동과 같은 세뢀적인 λ―Έμ‹œμ  섀계(micro-level design) 결정을 λ‹€λ£Ήλ‹ˆλ‹€ [1, 3, 4]. * **λͺ©μ κ³Ό νŠΉμ§•:** λ””μžμΈ νŒ¨ν„΄μ€ μ‹œμŠ€ν…œ κ΅¬ν˜„ μ‹œ λ°˜λ³΅λ˜λŠ” λ¬Έμ œμ— λŒ€ν•΄ κ²€μ¦λœ μž¬μ‚¬μš© κ°€λŠ₯ν•œ 해결책을 μ œκ³΅ν•©λ‹ˆλ‹€ [2, 5]. 이λ₯Ό 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±, 가독성, 그리고 μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚€λŠ” 역할을 ν•©λ‹ˆλ‹€ [1, 2]. λ””μžμΈ νŒ¨ν„΄μ˜ λ²”μœ„λŠ” κ°œλ³„ μ»΄ν¬λ„ŒνŠΈλ‘œ 쒁게 μ œν•œλ˜λ©°, μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ΄ μ •μ˜ν•œ 전체적인 ν”„λ ˆμž„μ›Œν¬μ™€ ꡬ쑰에 κΈ°μ—¬ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€ [1, 2]. λ¬Έμ„œν™” μΈ‘λ©΄μ—μ„œλ„ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ΄ κ³ μˆ˜μ€€ 섀계 λ¬Έμ„œλ‚˜ μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨μ„ ν¬ν•¨ν•˜λŠ” 반면, λ””μžμΈ νŒ¨ν„΄μ€ 상세 섀계 λͺ…μ„Έμ„œλ‚˜ UML λ‹€μ΄μ–΄κ·Έλž¨μ„ 주둜 μˆ˜λ°˜ν•©λ‹ˆλ‹€ [2]. * **μ„€κ³„μ˜ κ΅­μ†Œμ„± κΈ°μ€€ (Locality Criterion):** μ•„ν‚€ν…μ²˜μ  섀계와 μ„ΈλΆ€ 섀계(λ””μžμΈ νŒ¨ν„΄ λ“±)λ₯Ό κ΅¬λΆ„ν•˜λŠ” ν•œ κ°€μ§€ μ‹œλ„λ‘œ 'κ΅­μ†Œμ„± κΈ°μ€€(Locality Criterion)'이 μžˆμŠ΅λ‹ˆλ‹€ [6]. 이 기쀀에 λ”°λ₯΄λ©΄, νŠΉμ • μ†Œν”„νŠΈμ›¨μ–΄ 섀계 쑰건이 κ΅­μ†Œμ μ΄μ§€ μ•Šμ„ λ•Œ(non-local) μ•„ν‚€ν…μ²˜μ μ΄λΌκ³  μ •μ˜ν•˜λ©°, ν”„λ‘œκ·Έλž¨μ΄ ν•΄λ‹Ή 쑰건을 μœ„λ°˜ν•˜λ„λ‘ ν™•μž₯될 수 μžˆλ‹€λ©΄ 그것은 μ•„ν‚€ν…μ²˜ 섀계에 ν•΄λ‹Ήν•©λ‹ˆλ‹€ [6]. λ””μžμΈ νŒ¨ν„΄μ€ 이 기쀀에 λΉ„μΆ”μ–΄ λ³Ό λ•Œ 더 κ΅­μ†Œμ μΈ 성격을 μ§€λ‹™λ‹ˆλ‹€ [6]. * **λ””μžμΈ νŒ¨ν„΄μ˜ μ£Όμš” λΆ„λ₯˜:** λ””μžμΈ νŒ¨ν„΄μ€ μ†Œν”„νŠΈμ›¨μ–΄ ꡬ좕 및 κ΅¬ν˜„ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 크게 생성적(Creational), ꡬ쑰적(Structural), ν–‰μœ„μ (Behavioral) νŒ¨ν„΄μœΌλ‘œ λΆ„λ₯˜λ  수 μžˆμŠ΅λ‹ˆλ‹€ [7]. ## βš–οΈ Trade-offs & Caveats μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. (제곡된 μ†ŒμŠ€λŠ” μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ˜ μž₯단점은 μƒμ„Ένžˆ μ„€λͺ…ν•˜κ³  μžˆμœΌλ‚˜, λ””μžμΈ νŒ¨ν„΄ 자체λ₯Ό μ μš©ν–ˆμ„ λ•Œ λ°œμƒν•  수 μžˆλŠ” μ œμ•½ 사항, λΆ€μž‘μš© λ˜λŠ” λ°˜λŒ€ 급뢀에 λŒ€ν•œ ꡬ체적인 λ‚΄μš©μ€ ν¬ν•¨ν•˜κ³  μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.) ## πŸ”— Knowledge Connections ### Related Concepts #### [ꡬ쑰적 차원 (Structural Dimension)] - [[Software Architecture Pattern]] - μ—°κ²° 이유: λ””μžμΈ νŒ¨ν„΄μ΄ κ°œλ³„ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ λ―Έμ‹œμ  섀계λ₯Ό λ‹€λ£¨λŠ” 반면, μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ€ μ‹œμŠ€ν…œ μ „λ°˜μ˜ κ±°μ‹œμ  ꡬ쑰λ₯Ό μ •μ˜ν•˜λ―€λ‘œ 두 κ°œλ…μ€ μƒν˜Έ λ³΄μ™„μ μ΄λ©΄μ„œλ„ λŒ€λΉ„λ˜λŠ” 핡심 κ°œλ…μž…λ‹ˆλ‹€ [1, 2]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 마이크둜 레벨의 λ””μžμΈ νŒ¨ν„΄λ“€μ΄ μ–΄λ–»κ²Œ μ‘°ν•©λ˜μ–΄ 맀크둜 레벨의 μ•„ν‚€ν…μ²˜ νŒ¨ν„΄(예: κ³„μΈ΅ν˜•, λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€)이 μ œκ³΅ν•˜λŠ” 큰 ν‹€ λ‚΄μ—μ„œ μž‘λ™ν•˜κ³  κΈ°μ—¬ν•˜λŠ”μ§€ ꡬ쑰적 차이λ₯Ό λͺ…ν™•νžˆ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2]. #### [λΆ„λ₯˜ 체계 (Classification)] - [[Creational, Structural, and Behavioral Patterns]] - μ—°κ²° 이유: λ””μžμΈ νŒ¨ν„΄μ΄ μ†Œν”„νŠΈμ›¨μ–΄μ˜ λ‹€μ–‘ν•œ κ΅¬ν˜„ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ±„νƒν•˜λŠ” ꡬ체적인 λΆ„λ₯˜ μ²΄κ³„μž…λ‹ˆλ‹€ [7]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ†Œν”„νŠΈμ›¨μ–΄ ꡬ좕 κ³Όμ •μ—μ„œ 객체 생성, ꡬ쑰화, λ™μž‘ 방식을 λ‹€λ£¨λŠ” ꡬ체적인 방법둠(예: 싱글톀, νŒ©ν† λ¦¬, μ˜΅μ €λ²„ λ“±)을 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [2, 4, 7]. ### Deeper Research Questions - νŠΉμ • μ•„ν‚€ν…μ²˜ νŒ¨ν„΄(예: κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜) λ‚΄μ—μ„œ λ””μžμΈ νŒ¨ν„΄(예: νŒ©ν† λ¦¬, μ „λž΅ νŒ¨ν„΄)은 ꡬ체적으둜 μ–΄λ–»κ²Œ κ²°ν•©λ˜μ–΄ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ κ·ΉλŒ€ν™”ν•˜λŠ”κ°€? - κ΅­μ†Œμ„± κΈ°μ€€(Locality Criterion)을 μ μš©ν•  λ•Œ, νŠΉμ • λ””μžμΈ νŒ¨ν„΄μ΄ μ‹œμŠ€ν…œ 크기가 μ»€μ§€κ±°λ‚˜ ꡬ쑰가 변경됨에 따라 μ•„ν‚€ν…μ²˜μ  κ²°μ •μœΌλ‘œ 성격이 λ³€μ§ˆλ˜λŠ” κ²½κ³„λŠ” 어디인가? - μ‹±κΈ€ν†€μ΄λ‚˜ μ˜΅μ €λ²„μ™€ 같은 λ””μžμΈ νŒ¨ν„΄λ“€μ„ 잘λͺ» μ‚¬μš©ν–ˆμ„ λ•Œ, μ•„ν‚€ν…μ²˜ μˆ˜μ€€μ˜ μ„±λŠ₯ μ €ν•˜(예: 병λͺ© ν˜„μƒ)둜 μ΄μ–΄μ§ˆ 수 μžˆλŠ” ꡬ체적인 λ©”μ»€λ‹ˆμ¦˜μ€ 무엇인가? - 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° μ‹œλŒ€μ— ν™•λ¦½λœ λ””μžμΈ νŒ¨ν„΄λ“€μ΄ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ΄λ‚˜ μ„œλ²„λ¦¬μŠ€(Serverless)와 같은 μ΅œμ‹  ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ ν™˜κ²½μ—μ„œλ„ μ—¬μ „νžˆ μœ νš¨ν•œκ°€? - 마이크둜 레벨의 λ””μžμΈ νŒ¨ν„΄μ΄ μ‹œμŠ€ν…œμ˜ κ±°μ‹œμ μΈ λ³΄μ•ˆ 취약점을 μ˜ˆλ°©ν•˜κ±°λ‚˜ μ™„ν™”ν•˜λŠ” 데 μ§μ ‘μ μœΌλ‘œ κΈ°μ—¬ν•  수 μžˆλŠ” 사둀가 μžˆλŠ”κ°€? ### Practical Application Contexts - **Implementation:** κ°œλ°œμžκ°€ μ½”λ”© λ‹¨κ³„μ—μ„œ κ°œλ³„ κ°μ²΄λ‚˜ 클래슀의 생성을 κ΄€λ¦¬ν•˜κ±°λ‚˜ μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ νŠΉμ • μƒν˜Έμž‘μš© 문제λ₯Ό ν•΄κ²°ν•  λ•Œ, ν‘œμ€€ν™”λœ 해결책인 싱글톀, νŒ©ν† λ¦¬ λ“±μ˜ λ””μžμΈ νŒ¨ν„΄μ„ 직접 μ μš©ν•©λ‹ˆλ‹€ [2, 4]. - **System Design:** 상세 μ‹œμŠ€ν…œ 섀계 λ‹¨κ³„μ—μ„œ κ°œλ³„ λͺ¨λ“ˆ λ‚΄μ˜ ꡬ쑰적, ν–‰μœ„μ  츑면을 λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ UML λ‹€μ΄μ–΄κ·Έλž¨ 및 상세 섀계 μ‚¬μ–‘μ„œλ₯Ό μž‘μ„±ν•  λ•Œ λ””μžμΈ νŒ¨ν„΄μ΄ ν™œμš©λ©λ‹ˆλ‹€ [2]. - **Operation / Maintenance:** λ””μžμΈ νŒ¨ν„΄μ„ 톡해 μž‘μ„±λœ μ½”λ“œλŠ” 가독성이 λ†’κ³  μž¬μ‚¬μš©μ΄ μ‰¬μ›Œμ Έ, ν–₯ν›„ μ‹œμŠ€ν…œμ˜ λ‘œμ§μ„ λ³€κ²½ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” μœ μ§€λ³΄μˆ˜ μž‘μ—…μ„ 효율적으둜 λ§Œλ“­λ‹ˆλ‹€ [1, 8]. - **Learning Path:** μ‹œμŠ€ν…œμ˜ 전체 ꡬ쑰인 μ•„ν‚€ν…μ²˜λ₯Ό μ΄ν•΄ν•˜λŠ” κ³Όμ •μ—μ„œ, 더 μž‘μ€ λ‹¨μœ„μΈ κ°œλ³„ λͺ¨λ“ˆμ΄ μ–΄λ–»κ²Œ 쑰직되고 λ™μž‘ν•˜λŠ”μ§€(λ””μžμΈ)λ₯Ό ν•™μŠ΅ν•˜λŠ” 것은 μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ˜ 기초λ₯Ό λ‹€μ§€λŠ” ν•„μˆ˜ λ‹¨κ³„μž…λ‹ˆλ‹€ [1, 9]. - **My Project Relevance:** 개발 ν”„λ‘œμ νŠΈ μ‹œ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄(예: 클린 μ•„ν‚€ν…μ²˜, κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜)이 μ •ν•΄μ§„ ν…Œλ‘λ¦¬ μ•ˆμ—μ„œ, λ”μš± ν’ˆμ§ˆμ΄ λ†’κ³  버그가 적은 μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ ꡬ체적인 μ½”λ”© μ „μˆ λ‘œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€ [10, 11]. ### Adjacent Topics - [[Software Architecture Pattern]] - ν™•μž₯ λ°©ν–₯: 마이크둜 레벨의 μ„ΈλΆ€ μ„€κ³„μ—μ„œ λ²—μ–΄λ‚˜, μ‹œμŠ€ν…œ μ „λ°˜μ˜ μ»΄ν¬λ„ŒνŠΈ μƒν˜Έμž‘μš©, μ„±λŠ₯, ν™•μž₯μ„± 등을 μ œμ–΄ν•˜λŠ” 맀크둜 레벨의 λ°©λ²•λ‘ μœΌλ‘œ μ‹œμ•Όλ₯Ό λ„“ν˜€ ν•™μŠ΅μ„ ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 3, 12]. - [[Anti-patterns]] - ν™•μž₯ λ°©ν–₯: 잘λͺ»λœ μ•„ν‚€ν…μ²˜μ  κ²°μ •μ΄λ‚˜ 섀계 선택이 μ–΄λ–»κ²Œ μ‹œμŠ€ν…œμ˜ ν’ˆμ§ˆμ„ μ €ν•˜μ‹œν‚€λŠ”μ§€(예: ꡬ쑰 침식 λ“±)λ₯Ό μ—°κ΅¬ν•˜μ—¬, μ˜¬λ°”λ₯Έ λ””μžμΈ νŒ¨ν„΄ 및 μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ 적용의 μ€‘μš”μ„±μ„ μ—­μ„€μ μœΌλ‘œ μ΄ν•΄ν•˜λŠ” λ°©ν–₯으둜 ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [13, 14]. --- *Last updated: 2026-05-02*