46 lines
3.3 KiB
Markdown
46 lines
3.3 KiB
Markdown
---
|
|
id: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d
|
|
category: "[[10_Wiki/Topics/Development]]"
|
|
confidence_score: 0.99
|
|
tags: [engineering-principles, solid, dry, kiss, yagni, clean-code, software-engineering]
|
|
last_reinforced: 2026-05-01
|
|
github_commit: "wikification-engineering-principles"
|
|
---
|
|
|
|
# [[Engineering Principles (SOLID, DRY, KISS, YAGNI)]]
|
|
|
|
## 📌 한 줄 통찰 (The Karpathy Summary)
|
|
> 소프트웨어 엔지니어링의 핵심 원칙들은 코드의 복잡성을 통제하고 유지보수성을 극대화하기 위한 도구이며, 특히 SOLID와 DRY/KISS/YAGNI는 '단순함'과 '유연함' 사이의 최적의 균형점을 찾기 위한 지침이다.
|
|
|
|
## 📖 구조화된 지식 (Synthesized Content)
|
|
|
|
### 1. SOLID 원칙 (Object-Oriented Design)
|
|
- **SRP (단일 책임 원칙)**: 하나의 모듈/컴포넌트는 오직 하나의 책임(변경 이유)만 가져야 한다. React에서는 거대한 컴포넌트를 기능별로 쪼개는 핵심 근거가 된다.
|
|
- **OCP (개방-폐쇄 원칙)**: 확장에는 열려 있고 수정에는 닫혀 있어야 한다. 컴포넌트 합성을 통해 기존 코드를 건드리지 않고 기능을 확장한다.
|
|
- **LSP (리스코프 치환 원칙)**: 자식 클래스(또는 서브 컴포넌트)는 부모의 역할을 온전히 수행할 수 있어야 한다.
|
|
- **ISP (인터페이스 분리 원칙)**: 사용하지 않는 인터페이스(Props)에 의존하지 않도록 잘게 쪼갠다.
|
|
- **DIP (의존성 역전 원칙)**: 구체적인 구현이 아닌 추상화에 의존하여 결합도를 낮춘다.
|
|
|
|
### 2. Pragmatic Principles (DRY, KISS, YAGNI)
|
|
- **DRY (Don't Repeat Yourself)**: 지식의 중복을 피한다. 반복되는 로직은 커스텀 훅이나 유틸리티로 추출한다.
|
|
- **KISS (Keep It Simple, Stupid)**: 단순함이 궁극의 정교함이다. 과도한 추상화보다 직관적인 코드를 우선한다.
|
|
- **YAGNI (You Aren't Gonna Need It)**: 실제로 필요하기 전까지는 기능을 미리 구현하지 않는다. 미래를 대비한 오버엔지니어링을 경계한다.
|
|
|
|
### 3. Clean Code 실무
|
|
- **가독성 우선**: 코드는 컴퓨터가 읽기 위함이 아니라 사람이 읽기 위해 작성된다. 명확한 변수명과 함수 크기 조절이 필수적이다.
|
|
- **단위 테스트 가능성**: 원칙을 준수한 코드는 자연스럽게 테스트하기 쉬운(Testable) 구조가 된다.
|
|
|
|
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
|
|
- **DRY vs KISS**: 중복을 제거하기 위한 무리한 추상화는 코드를 더 이해하기 어렵게 만든다. '세 번 반복될 때까지 기다리기(Rule of Three)'가 좋은 절충안이다.
|
|
- **YAGNI vs 확장성**: 미래를 무시하는 것과 유연한 구조를 설계하는 것은 다르다. YAGNI는 '기능'에 대한 것이고, SOLID는 '구조'에 대한 것이다.
|
|
|
|
## 🔗 지식 연결 (Graph)
|
|
- **Parent**: [[10_Wiki/Topics/Development]]
|
|
- **Related**: [[Legacy React Migration & Refactoring Standard]], [[Custom Hooks]], [[Feature-Sliced Design]]
|
|
- **Raw Source**: [[00_Raw/DRY]], [[00_Raw/KISS]], [[00_Raw/YAGNI]], [[00_Raw/Single Responsibility Principle]], [[00_Raw/Clean Code and SOLID Principles]]
|
|
|
|
## 💻 GitHub 동기화 자동화 워크플로우
|
|
1. Stage: git add .
|
|
2. Commit: `git commit -m "[P-Reinforce] Wikify Core Engineering Principles (SOLID, DRY, KISS, YAGNI)"`
|
|
3. Push: `git push origin main`
|