---
id: P-REINFORCE-WIKI-DEV-SOLID
title: "객체 지향 설계 5원칙 (SOLID Principles)"
category: "10_Wiki/💻 Topics_Dev"
status: verified
canonical_id: ""
aliases: ["SOLID", "객체 지향 설계 원칙", "클린 코드 원칙"]
duplicate_of: ""
source_trust_level: A
confidence_score: 1.0
tags: ["OOP", "SOLID", "Clean_Code", "Design_Principles", "Maintainability"]
raw_sources: ["Datacollector_Export_2026-05-02"]
last_reinforced: 2026-05-02
github_commit: ""
---

# [[객체 지향 설계 5원칙 (SOLID Principles)]]

## 1. 개요
SOLID 원칙은 객체 지향 프로그래밍에서 소프트웨어 설계를 더욱 유연하고 유지보수하기 좋게 만들기 위해 고안된 5가지 설계 원칙의 집합이다. 로버트 C. 마틴에 의해 체계화되었으며, 결합도를 낮추고 응집도를 높이는 견고한 코드베이스의 기초가 된다.

## 2. 5대 원칙 (Five Principles)
1.  **SRP (Single Responsibility Principle, 단일 책임 원칙)**: 클래스는 단 하나의 변경 이유만 가져야 한다. (하나의 클래스는 하나의 역할만 수행)
2.  **OCP (Open/Closed Principle, 개방-폐쇄 원칙)**: 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다. (기존 코드 변경 없이 기능 추가 가능해야 함)
3.  **LSP (Liskov Substitution Principle, 리스코프 치환 원칙)**: 하위 타입은 언제나 자신의 상위 타입으로 교체될 수 있어야 한다.
4.  **ISP (Interface Segregation Principle, 인터페이스 분리 원칙)**: 자신이 사용하지 않는 메서드에 의존하도록 강제해서는 안 된다. (구체적인 여러 인터페이스가 범용 하나보다 낫다)
5.  **DIP (Dependency Inversion Principle, 의존성 역전 원칙)**: 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다.

## 3. 실전 적용 팁
- **SRP부터 시작**: 클래스의 역할을 분리하는 것만으로도 코드의 복잡성이 획기적으로 줄어든다.
- **인터페이스 우선 설계**: 구현체보다 인터페이스(Contract)를 먼저 정의하여 자연스럽게 OCP와 DIP를 준수하도록 유도한다.
- **점진적 리팩토링**: 레거시 코드를 한꺼번에 바꾸기보다 신규 기능 추가 시 해당 영역에 원칙을 적용하며 개선한다.

## 4. 트레이드오프
- **장점**: 코드 재사용성 향상, 테스트 용이성, 변화에 유연한 대응.
- **단점**: 인터페이스 및 추상화 도입으로 인해 초기 설계 비용과 보일러플레이트 코드 증가.

## 5. 지식 연결 (Related)
- [[Clean_Architecture]]: SOLID 원칙이 대규모 시스템 레이어 분리에 적용된 결과물.
- [[Dependency_Injection]]: DIP를 실현하기 위한 핵심 기술적 수단.
- [[Design_Patterns]]: SOLID 원칙을 특정 문제 해결에 맞게 구체화한 검증된 패턴들.

## 🧪 검증 상태 (Validation)
- **정보 상태**: 검증 완료 (Verified)
- **출처 신뢰도**: A
- **검토 이유**: 소프트웨어 공학의 정수인 SOLID 원칙의 명확한 정의와 실천 방안 수록.
