--- id: P-REINFORCE-AI-DOM-INVARIANT category: "10_Wiki/πŸ’‘ Topics/AI" confidence_score: 0.93 tags: [SoftwareEngineering, DDD, DomainDrivenDesign, Reliability] last_reinforced: 2026-04-20 --- # [[Encapsulation-of-Domain-Invariants|Encapsulation-of-Domain-Invariants]] (도메인 λΆˆλ³€μ„± μΊ‘μŠν™”) ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > "데이터가 μƒμ„±λ˜λŠ” μˆœκ°„λΆ€ν„° 죽을 λ•ŒκΉŒμ§€ '옳음'을 κ°•μ œν•˜λŠ” 것." λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ΄ κΉ¨μ§„ 객체가 μ‹œμŠ€ν…œ λ‚΄λΆ€λ‘œ ν•œ λ°œμ§λ„ λ“€μ–΄μ˜€μ§€ λͺ»ν•˜λ„둝 객체 λ‚΄λΆ€μ—μ„œ μ² μ €νžˆ λ°©μ–΄ν•˜λŠ” 섀계 기법이닀. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **What is an Invariant?**: - μ–΄λ–€ μƒν™©μ—μ„œλ„ 항상 참이어야 ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™ (예: "μ£Όλ¬Έ μˆ˜λŸ‰μ€ λ°˜λ“œμ‹œ 0보닀 컀야 ν•œλ‹€", "ν• μΈμœ¨μ€ 100%λ₯Ό μ΄ˆκ³Όν•  수 μ—†λ‹€"). - **Encapsulation Strategy**: - **Private Constructor**: μ™ΈλΆ€μ—μ„œ ν•¨λΆ€λ‘œ 객체λ₯Ό λ§Œλ“€ 수 μ—†κ²Œ 차단. - **Factory Method**: μœ νš¨μ„± 검사λ₯Ό ν†΅κ³Όν•œ κ²½μš°μ—λ§Œ 객체λ₯Ό μƒμ„±ν•˜μ—¬ λ°˜ν™˜. - **Read-only state**: 생성 이후 μƒνƒœλ₯Ό μž„μ˜λ‘œ λ³€κ²½ν•˜μ§€ λͺ»ν•˜κ²Œ ν•˜μ—¬ λΆˆλ³€μ„±μ„ μœ μ§€. - **Benefit**: 버그 λ°œμƒ 지점을 객체 생성 μ‹œμ μœΌλ‘œ ν•œμ •μ‹œμΌœ, μ‹œμŠ€ν…œμ˜ μ•ˆμ •μ„±κ³Ό 예츑 κ°€λŠ₯성을 높인닀. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (RL Update) - λͺ¨λ“  κ·œμΉ™μ„ 객체 μ•ˆμ— λ„£μœΌλ©΄ 객체가 λ„ˆλ¬΄ λΉ„λŒ€ν•΄μ§€λŠ” 'Fat Model' λ¬Έμ œκ°€ 생길 수 μžˆλ‹€. κ·œμΉ™μ΄ μ—¬λŸ¬ 객체에 걸쳐 μžˆκ±°λ‚˜ μ™ΈλΆ€ μžμ›(DB λ“±) 확인이 ν•„μš”ν•œ κ²½μš°μ—λŠ” '도메인 μ„œλΉ„μŠ€'λ‚˜ 'μœ νš¨μ„± 검사기'둜 역할을 λΆ„λ¦¬ν•˜λ˜, 객체 슀슀둜의 μžλ¦½μ„±μ€ ν›Όμ†ν•˜μ§€ μ•ŠλŠ” κ· ν˜•μ΄ ν•„μš”ν•˜λ‹€. ## πŸ”— 지식 μ—°κ²° (Graph) - Related: Domain-Driven-Design (DDD) , Value-Objects - Pattern: Factory-Method-Pattern