---
id: P-REINFORCE-AUTO-OODP-001
category: "[[10_Wiki/💡 Topics/AI]]"
confidence_score: 0.97
tags: [auto-reinforced, software-engineering, oop, architecture]
last_reinforced: 2026-04-20
---

# [[Object-Oriented-Design-Patterns]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> "검증된 설계의 악보: 클래스와 객체 간의 관계를 구조화하여 변경에는 유연하고 확장에는 열려 있는 소프트웨어를 만드는 23개 이상의 고전적 해법."

## 📖 구조화된 지식 (Synthesized Content)
객체지향 디자인 패턴(OODP)은 1994년 GoF(Gang of Four)에 의해 정립된, 객체지향 설계에서 자주 발생하는 문제들에 대한 모범 사례(Best Practices)입니다.

1.  **3대 분류**:
    *   **생성 패턴 (Creational)**: 객체 생성 방식을 추상화 (Singleton, Factory Method, Abstract Factory, Builder, Prototype).
    *   **구조 패턴 (Structural)**: 클래스/객체를 더 큰 구조로 조합 (Adapter, Composite, Decorator, Facade, Proxy).
    *   **행위 패턴 (Behavioral)**: 객체 간의 알고리즘 및 책임 분배 (Observer, Strategy, State, Command, Visitor, Mediator).
2.  **핵심 철학 (SOLID & Composition Over Inheritance)**:
    *   상속보다는 구성을 사용하고, 구현이 아닌 인터페이스에 맞춰 프로그래밍 함.
3.  **패턴의 가치**:
    *   개발자 간의 공통 언어 제공, 코드 재사용성 증대, 유지보수 비용 절감.

## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌**: 과거에는 '싱글톤(Singleton)'을 만능 도구처럼 썼으나, 현재는 전역 상태를 만들어 단위 테스트를 어렵게 만드는 '안티 패턴'으로 지목되기도 함 (의존성 주입-DI로 대체 권장).
- **정책 변화(RL Update)**: 현대의 함수형 프로그래밍(FP) 패러다임이 확산되면서, 복잡한 상태 패턴이나 전략 패턴 대신 단순한 고차 함수(Higher-order functions)를 사용하는 '패턴의 경량화' 정책이 선호됨.

## 🔗 지식 연결 (Graph)
- **Related**: [[Design Patterns]], [[Clean Code]], [[Separation_of_Concerns]], [[Software Architecture]], [[Component_Design_Patterns]]
- **Modern Tech/Tools**: InversifyJS (DI), Reactive Extensions (Observer).
---
