3.3 KiB
3.3 KiB
id, category, confidence_score, tags, last_reinforced, github_commit
| id | category | confidence_score | tags | last_reinforced | github_commit | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d | Dev | 0.99 |
|
2026-05-01 | 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 동기화 자동화 워크플로우
- Stage: git add .
- Commit:
git commit -m "[P-Reinforce] Wikify Core Engineering Principles (SOLID, DRY, KISS, YAGNI)" - Push:
git push origin main