Files
2nd/10_Wiki/Topics/Object_Oriented_Programming.md
T
2026-05-02 23:33:34 +09:00

47 lines
3.8 KiB
Markdown

---
id: P-REINFORCE-WIKI-DEV-OOP
title: "객체 지향 프로그래밍과 고도화된 설계 패러다임 (OOP)"
category: Unified
status: verified
canonical_id: ""
aliases: ["OOP", "객체 지향 프로그래밍", "Object-Oriented Programming", "상속", "캡슐화"]
duplicate_of: ""
source_trust_level: A
confidence_score: 1.0
tags: ["OOP", "Design_Principles", "Software_Engineering", "Modeling", "Clean_Code"]
raw_sources: ["Datacollector_Export_2026-05-02"]
last_reinforced: 2026-05-02
github_commit: ""
---
# [[객체 지향 프로그래밍과 고도화된 설계 패러다임 (OOP)]]
## 1. 개요
객체 지향 프로그래밍(OOP)은 데이터와 이를 처리하는 논리를 하나의 단위인 '객체(Object)'로 묶고, 객체 간의 협력을 통해 복잡한 소프트웨어를 구성하는 프로그래밍 패러다임이다. 단순히 데이터를 구조화하는 것을 넘어, 현실 세계의 개념을 코드로 전이시키고 변화에 유연하게 대응할 수 있는 시스템을 구축하기 위한 캡슐화, 상속, 다형성, 추상화의 4대 핵심 원칙을 기반으로 한다.
## 2. 4대 핵심 원칙
- **캡슐화 (Encapsulation)**: 데이터와 메서드를 하나로 묶고 외부 접근을 제한(정보 은닉)하여 객체의 내부 구현 변경이 외부에 영향을 주지 않도록 보호.
- **상속 (Inheritance)**: 기존 클래스의 속성과 기능을 물려받아 재사용하고 확장. 코드 중복을 줄이고 계층 구조 형성.
- **다형성 (Polymorphism)**: 동일한 인터페이스나 상위 클래스에 대해 서로 다른 구현체(객체)가 각자의 방식으로 동작하게 함으로써 유연한 교체 가능성 확보.
- **추상화 (Abstraction)**: 복잡한 내부 로직은 숨기고 핵심적인 개념이나 인터페이스만 노출하여 사용자가 최소한의 지식으로 객체를 활용할 수 있게 함.
## 3. 엔지니어링 가치
- **모델링의 직관성**: 비즈니스 도메인의 개념을 클래스와 객체로 직접 매핑하여 설계자와 개발자 간의 의사소통 간극 해소.
- **코드 재사용 및 유지보수성**: 상속과 합성을 통해 검증된 코드를 재사용하고, 특정 객체의 책임만 수정함으로써 시스템 전반의 안정성 유지.
- **대규모 시스템의 복잡성 제어**: 시스템을 독립적인 객체들의 집합으로 분할함으로써 개발자가 한 번에 인지해야 하는 코드의 범위를 국소화.
## 4. 트레이드오프 및 주의사항
- **깊은 상속 계층의 위험**: 과도한 상속은 부모 클래스의 변경이 수많은 자식 클래스에 예측 불가능한 영향을 미치는 '취약한 기반 클래스' 문제 초래. 상속보다는 합성(Composition) 권장.
- **인지 부하의 증가**: 수천 개의 클래스로 구성된 대규모 OOP 시스템은 객체 간의 호출 관계와 의존성 지도를 파악하기 위한 IDE 도구와 높은 숙련도 요구.
- **성능 오버헤드**: 객체 생성과 메서드 호출 과정에서 발생하는 간접 참조 오버헤드가 있을 수 있으나, 현대의 하드웨어와 런타임 최적화(JIT 등)를 통해 대부분의 경우 무시 가능한 수준임.
## 5. 지식 연결 (Related)
- [[SOLID_Principles]]: OOP 설계를 건전하게 유지하기 위한 5대 가이드라인.
- [[Design_Patterns]]: OOP에서 반복적으로 발생하는 설계 문제에 대한 검증된 해결책.
- [[Clean_Code]]: 가독성 높고 의도가 명확한 OOP 코드를 작성하기 위한 실천법.
## 🧪 검증 상태 (Validation)
- **정보 상태**: 검증 완료 (Verified)
- **출처 신뢰도**: A
- **검토 이유**: 현대 소프트웨어 개발의 주류 패러다임인 OOP의 핵심 원리를 정립하고, 대규모 시스템의 지속 가능한 설계를 위한 기반 지식 통합.