SRP, 단일 책임 원칙 (Single Responsibility Principle)
- 한 클래스는 단 하나의 변경 이유만 가져야 한다.
- 예시
- ReportPrinter 클래스가 보고서 생성 + 출력까지 다 하면 SRP 위반
- 생성은 ReportGenerator, 출력은 ReportPrinter로 분리
- ReportPrinter 클래스가 보고서 생성 + 출력까지 다 하면 SRP 위반
OCP, 개방-폐쇄 원칙 (Open/Closed Principle)
- 확장에는 열려있고, 변경에는 닫혀 있어야 한다.
- 기존 코드를 건드리지 않고, 기능을 확장할 수 있어야 한다.
- 이를 위해 다형성과 추상화(인터페이스)를 활용
- 예시
- 다형성을 사용했더라도 client 코드에서 직접 구현체를 생성한다면 OCP 위반
- 해결 방법 : 스프링의 DI로 객체 조립 책임을 외부로 분리
- 다형성을 사용했더라도 client 코드에서 직접 구현체를 생성한다면 OCP 위반
LSP, 리스코프 치환 원칙 (Liskov substitution principle)
- 하위 타입은 상위 타입의 행위를 대체할 수 있다.
- 하위 클래스가 상위 클래스의 인터페이스 규약을 깨면 안됨
- 예시
- Rectangle을 상속한 Square가 setWidth와 setHeight에서 이상한 동작을 하면 LSP 위반
- 상속 구조가 적절하지 않다는 신호
- Rectangle을 상속한 Square가 setWidth와 setHeight에서 이상한 동작을 하면 LSP 위반
ISP, 인터페이스 분리 원칙 (Interface segregation principle)
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
- 즉, 필요한 인터페이스를 분리해서 사용하라는 것.
- 클라이언트가 사용하지 않는 기능에 의존하지 않도록 해야 함.
- 인터페이스 명확, 대체 가능성 높아진다.
- 예시
- Machine 인터페이스에 print(), fax(), scan() 이 함께 있으면, 프린터만 쓰는 클래스도 fax에 의존하게 됨으로 분리가 필요
DIP, 의존 관계 역전 원칙 (Dependency inversion principle)
- 추상화에 의존해야지, 구체화에 의존하면 안된다.
- 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻
- 즉 역할에 의존해야 한다! 역할(인터페이스)에 의존해야 유연하게 구현체를 변경할 수 있다.
'CS > Spring' 카테고리의 다른 글
Front Controller & DispatcherServlet (0) | 2025.05.26 |
---|---|
Spring vs Spring Boot (0) | 2025.05.26 |
@Autowired (0) | 2025.05.26 |
Filter vs Interceptor (0) | 2025.05.22 |
Spring Bean Scope (0) | 2025.05.12 |