Files
2nd/10_Wiki/Topics_Dev/Object_Oriented_Programming.md
T

3.8 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, tags, raw_sources, last_reinforced, github_commit
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score tags raw_sources last_reinforced github_commit
P-REINFORCE-WIKI-DEV-OOP 객체 지향 프로그래밍과 고도화된 설계 패러다임 (OOP) 10_Wiki/💻 Topics_Dev verified
OOP
객체 지향 프로그래밍
Object-Oriented Programming
상속
캡슐화
A 1.0
OOP
Design_Principles
Software_Engineering
Modeling
Clean_Code
Datacollector_Export_2026-05-02
2026-05-02

객체 지향 프로그래밍과 고도화된 설계 패러다임 (OOP)

1. 개요

객체 지향 프로그래밍(OOP)은 데이터와 이를 처리하는 논리를 하나의 단위인 '객체(Object)'로 묶고, 객체 간의 협력을 통해 복잡한 소프트웨어를 구성하는 프로그래밍 패러다임이다. 단순히 데이터를 구조화하는 것을 넘어, 현실 세계의 개념을 코드로 전이시키고 변화에 유연하게 대응할 수 있는 시스템을 구축하기 위한 캡슐화, 상속, 다형성, 추상화의 4대 핵심 원칙을 기반으로 한다.

2. 4대 핵심 원칙

  • 캡슐화 (Encapsulation): 데이터와 메서드를 하나로 묶고 외부 접근을 제한(정보 은닉)하여 객체의 내부 구현 변경이 외부에 영향을 주지 않도록 보호.
  • 상속 (Inheritance): 기존 클래스의 속성과 기능을 물려받아 재사용하고 확장. 코드 중복을 줄이고 계층 구조 형성.
  • 다형성 (Polymorphism): 동일한 인터페이스나 상위 클래스에 대해 서로 다른 구현체(객체)가 각자의 방식으로 동작하게 함으로써 유연한 교체 가능성 확보.
  • 추상화 (Abstraction): 복잡한 내부 로직은 숨기고 핵심적인 개념이나 인터페이스만 노출하여 사용자가 최소한의 지식으로 객체를 활용할 수 있게 함.

3. 엔지니어링 가치

  • 모델링의 직관성: 비즈니스 도메인의 개념을 클래스와 객체로 직접 매핑하여 설계자와 개발자 간의 의사소통 간극 해소.
  • 코드 재사용 및 유지보수성: 상속과 합성을 통해 검증된 코드를 재사용하고, 특정 객체의 책임만 수정함으로써 시스템 전반의 안정성 유지.
  • 대규모 시스템의 복잡성 제어: 시스템을 독립적인 객체들의 집합으로 분할함으로써 개발자가 한 번에 인지해야 하는 코드의 범위를 국소화.

4. 트레이드오프 및 주의사항

  • 깊은 상속 계층의 위험: 과도한 상속은 부모 클래스의 변경이 수많은 자식 클래스에 예측 불가능한 영향을 미치는 '취약한 기반 클래스' 문제 초래. 상속보다는 합성(Composition) 권장.
  • 인지 부하의 증가: 수천 개의 클래스로 구성된 대규모 OOP 시스템은 객체 간의 호출 관계와 의존성 지도를 파악하기 위한 IDE 도구와 높은 숙련도 요구.
  • 성능 오버헤드: 객체 생성과 메서드 호출 과정에서 발생하는 간접 참조 오버헤드가 있을 수 있으나, 현대의 하드웨어와 런타임 최적화(JIT 등)를 통해 대부분의 경우 무시 가능한 수준임.
  • SOLID_Principles: OOP 설계를 건전하게 유지하기 위한 5대 가이드라인.
  • Design_Patterns: OOP에서 반복적으로 발생하는 설계 문제에 대한 검증된 해결책.
  • Clean_Code: 가독성 높고 의도가 명확한 OOP 코드를 작성하기 위한 실천법.

🧪 검증 상태 (Validation)

  • 정보 상태: 검증 완료 (Verified)
  • 출처 신뢰도: A
  • 검토 이유: 현대 소프트웨어 개발의 주류 패러다임인 OOP의 핵심 원리를 정립하고, 대규모 시스템의 지속 가능한 설계를 위한 기반 지식 통합.