--- id: [[P-Reinforce]]-AUTO-D7D274 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° (Object-Oriented Programming)" --- # [[객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° (Object-Oriented Programming)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)은 1980λ…„λŒ€μ— λΆ€μƒν•˜μ—¬ 데이터와 ν–‰μœ„λ₯Ό 객체(Object) 내에 μΊ‘μŠν™”ν•˜λŠ” κ°œλ…μ„ λ„μž…ν•œ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μž…λ‹ˆλ‹€ [1, 2]. 이 방식은 μ‹œμŠ€ν…œμ„ κΈ°λŠ₯ λ‹¨μœ„λ‘œ 수직적 뢄리λ₯Ό 이루게 ν•˜λ©°, 객체 κ°„μ˜ μ±…μž„μ„ λ‚˜λˆ„μ–΄ 클래슀λ₯Ό μ„€κ³„ν•©λ‹ˆλ‹€ [3]. μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„± λ“±μ˜ 원칙을 ν™œμš©ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄μ˜ λ³΅μž‘μ„±μ„ κ΄€λ¦¬ν•˜κ³  'κ΄€μ‹¬μ‚¬μ˜ 뢄리(SoC)'λ₯Ό μ΄‰μ§„ν•˜λŠ” 데 쀑점을 λ‘‘λ‹ˆλ‹€ [2]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **핡심 λ©”μ»€λ‹ˆμ¦˜κ³Ό λ³΅μž‘μ„± 관리:** OOPλŠ” μ‹œμŠ€ν…œμ˜ 데이터와 λ™μž‘([[Behavior]])을 객체 λ‹¨μœ„λ‘œ λ¬Άμ–΄(μΊ‘μŠν™”) μ½”λ“œλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€ [1, 2]. μ—¬λŸ¬ ν΄λž˜μŠ€κ°€ κ³΅μœ ν•˜λŠ” 곡톡적인 ν–‰λ™μ΄λ‚˜ 속성이 μžˆλ‹€λ©΄, 이λ₯Ό 베이슀 클래슀(κΈ°λ³Έ 클래슀)에 λ°°μΉ˜ν•˜κ³  λ‹€λ₯Έ ν΄λž˜μŠ€λ“€μ΄ 이λ₯Ό 상속(Inheritance)λ°›μ•„ κΈ°λŠ₯을 μž¬μ‚¬μš©ν•˜κ²Œ ν•¨μœΌλ‘œμ¨ 논리적 쀑볡을 λ°©μ§€ν•©λ‹ˆλ‹€ [4]. 이 외에도 λ‹€ν˜•μ„±(Polymorphism) λ“±μ˜ 원칙을 ν™œμš©ν•΄ λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ„ 효과적으둜 μ œμ–΄ν•©λ‹ˆλ‹€ [2]. - **섀계 원칙 (SOLID):** OOP 기반의 μ†Œν”„νŠΈμ›¨μ–΄ 섀계λ₯Ό λ”μš± μœ μ—°ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰¬μš°λ©° μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•˜κ²Œ λ§Œλ“€κΈ° μœ„ν•΄ κ³ μ•ˆλœ 것이 5κ°€μ§€ 기반 섀계 원칙인 SOLIDμž…λ‹ˆλ‹€ [5]. 이 원칙은 단일 μ±…μž„ 원칙(SRP)을 톡해 각 ν΄λž˜μŠ€κ°€ ν•˜λ‚˜μ˜ μ±…μž„λ§Œμ„ λ‹΄λ‹Ήν•˜λ„λ‘ μœ λ„ν•˜κ³  [1], μ˜μ‘΄μ„± μ—­μ „ 원칙(DIP)을 톡해 μ„ΈλΆ€ 사항이 좔상화에 μ˜μ‘΄ν•˜λ„λ‘ μ„€κ³„ν•©λ‹ˆλ‹€ [6]. μ΄λŸ¬ν•œ 객체 μ§€ν–₯ 섀계 원칙듀은 점차 규λͺ¨κ°€ μ»€μ§€λŠ” μ½”λ“œλ² μ΄μŠ€λ‚˜ 라이브러리λ₯Ό ꡬ좕할 λ•Œ μ΄μƒμ μž…λ‹ˆλ‹€ [7]. - **κ΄€μ‹¬μ‚¬μ˜ 뢄리(SoC) μ‹€ν˜„:** OOPλŠ” κ°œλ³„ 객체가 νŠΉμ • κΈ°λŠ₯ μΈ‘λ©΄μ΄λ‚˜ 관심사에 λŒ€ν•΄ 고유의 μ±…μž„μ„ 가지도둝 κ΅¬μ‘°ν™”ν•¨μœΌλ‘œμ¨, μžμ—°μŠ€λŸ½κ²Œ λͺ…ν™•ν•œ κ΄€μ‹¬μ‚¬μ˜ 뢄리가 이루어지도둝 μž₯λ €ν•©λ‹ˆλ‹€ [2]. - **AOPλ₯Ό ν†΅ν•œ ν•œκ³„ 보완:** OOPλŠ” 객체 κ°„μ˜ μ±…μž„μ„ 뢄리해 수직적인 λͺ¨λ“ˆν™”λ₯Ό λ‹¬μ„±ν•˜λŠ” λ°μ—λŠ” 맀우 νš¨κ³Όμ μ΄μ§€λ§Œ, λ‘œκΉ…μ΄λ‚˜ λ³΄μ•ˆκ³Ό 같이 μ‹œμŠ€ν…œ μ „λ°˜μ— 걸쳐 κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ˜λŠ” 'νš‘λ‹¨ 관심사(Cross-Cutting Concerns)'λ₯Ό λΆ„λ¦¬ν•˜λŠ” λ°μ—λŠ” ν•œκ³„κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€ [3]. λ”°λΌμ„œ μ΄λŸ¬ν•œ OOP의 단점을 λ³΄μ™„ν•˜κ³  μ½”λ“œλ₯Ό λ”μš± λ‹¨μˆœν™”ν•˜κΈ° μœ„ν•΄ 관점 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(AOP)κ³Ό 같은 기법이 ν•¨κ»˜ ν™œμš©λ©λ‹ˆλ‹€ [3, 8]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** SOLID [[Principles]], [[Separation of Concerns]] (SoC), Aspect-Oriented Programming (AOP), Encapsulation, Inheritance, Polymorphism - **Projects/Contexts:** μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 및 μ‹œμŠ€ν…œ 섀계, μœ μ§€λ³΄μˆ˜ 및 ν™•μž₯μ„± 관리λ₯Ό μœ„ν•œ μ—”ν„°ν”„λΌμ΄μ¦ˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ OOPλŠ” 객체 κ°„ μ±…μž„ 뢄리와 κΈ°λŠ₯ λ‹¨μœ„μ˜ λͺ¨λ“ˆν™”에 λ›°μ–΄λ‚œ 강점을 λ³΄μ΄μ§€λ§Œ λͺ¨λ“  관심사 뢄리에 μ™„λ²½ν•œ 것은 μ•„λ‹™λ‹ˆλ‹€. μ‹œμŠ€ν…œ 전체에 퍼져 μžˆλŠ” 곡톡 둜직(νš‘λ‹¨ 관심사)을 효율적으둜 λΆ„λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” AOP(관점 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°)의 μˆ˜ν‰μ  뢄리 μ ‘κ·Ό 방식을 ν˜Όν•©ν•˜μ—¬ 단점을 보완해야 ν•©λ‹ˆλ‹€ [3]. --- *Last updated: 2026-04-18* ---