원칙 | 설명 | 예시 |
S (Single Responsibility Principle) | 단일 책임 원칙 - 하나의 클래스는 하나의 책임만 가져야 함 | UserService가 인증, 회원가입, 이메일 전송까지 다 하면 SRP 위배 |
O (Open/Closed Principle) | 확장에는 열려 있고 수정에는 닫혀야 함 | 새로운 할인 정책 추가 시 기존 코드를 수정하지 않고 새 클래스로 확장 |
L (Liskov Substitution Principle) | 부모 객체를 자식 객체로 교체해도 시스템이 동작해야 함 | Bird → Penguin은 날 수 없으므로 fly() 메서드는 분리 필요 |
I (Interface Segregation Principle) | 클라이언트는 사용하지 않는 메서드에 의존하면 안 됨 | Animal 인터페이스에 fly(), swim() 다 있으면 ISP 위배 |
D (Dependency Inversion Principle) | 상위 모듈은 하위 모듈에 의존하면 안 되며, 둘 다 추상화에 의존해야 함 | EmailService를 구현체가 아닌 인터페이스로 의존 |