SOLID 원칙 완전 정복 — Kotlin & Spring Boot 실전 가이드
Robert C. Martin이 정리한 객체지향 설계의 5가지 원칙.
이론이 아닌 Kotlin + Spring Boot 코드로 각 원칙을 체득한다.
SOLID란?
| 원칙 | 이름 | 핵심 한 줄 요약 |
|---|
| S | Single Responsibility | 클래스는 변경 이유가 하나여야 한다 |
| O | Open/Closed | 확장에 열리고, 수정에 닫혀 있어야 한다 |
| L | Liskov Substitution | 하위 타입은 상위 타입을 완전히 대체할 수 있어야 한다 |
| I | Interface Segregation | 사용하지 않는 인터페이스에 의존하지 않아야 한다 |
| D | Dependency Inversion | 고수준 모듈은 저수준 모듈에 의존하지 않아야 한다 |
왜 SOLID인가?
SOLID 위반 → 코드 변경 비용 증가
→ 버그 범위 예측 불가
→ 테스트 작성 어려움
→ 팀 협업 마찰 증가
SOLID 준수 → 변경이 국소화됨
→ 테스트가 쉬워짐
→ 재사용성 향상
→ 의존성이 명확해짐
학습 순서
| 순서 | 원칙 | 파일 |
|---|
| 1 | Single Responsibility (SRP) | 01-srp.md |
| 2 | Open/Closed (OCP) | 02-ocp.md |
| 3 | Liskov Substitution (LSP) | 03-lsp.md |
| 4 | Interface Segregation (ISP) | 04-isp.md |
| 5 | Dependency Inversion (DIP) | 05-dip.md |
원칙 간 관계
SRP → 클래스 크기를 작게 유지
↓
OCP → 작은 클래스를 확장 가능하게 설계
↓
LSP → 다형성을 안전하게 사용
↓
ISP → 인터페이스를 역할에 맞게 분리
↓
DIP → 분리된 인터페이스로 의존성 역전
테스트 관점에서 본 SOLID
| 원칙 | 테스트가 어려운 이유 (위반 시) | 테스트가 쉬워지는 이유 (준수 시) |
|---|
| SRP | 하나의 테스트가 너무 많은 걸 검증 | 각 클래스 독립 테스트 가능 |
| OCP | 새 기능 추가 시 기존 테스트 깨짐 | 기존 테스트 유지, 새 테스트만 추가 |
| LSP | 구현체마다 다른 예외/동작 | 동일한 테스트 스위트로 모든 구현 검증 |
| ISP | 불필요한 Mock 메서드 많음 | 필요한 메서드만 Mock |
| DIP | 구체 클래스 직접 생성으로 테스트 불가 | 인터페이스 주입으로 Mock 교체 가능 |
5 items under this folder.