[Spring] Solid 원칙과 Spring

2023. 9. 11. 13:30Spring

1. 단일 책임 원칙(Single Responsibility Principle - SRP)

- 하나의 클래스는 하나의 책임만 가져야 한다

- 클래스가 여러 책임을 가지면 코드가 복잡해지고 유지 보수가 어려워진다.

2. 개방-폐쇄 원칙(Open-Closed Principle - OCP) 제일 중요한 원칙

- 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 수정에는 폐쇄적이어야 한다.

- 새로운 기능을 추가할 때 기존 코드를 수정하지 말고 확장만으로 가능하도록 설계해야 한다.

3. 리스코프 치환 원칙(Liskov Substitution Principle - LSP)

- 파생 클래스는 기반 클래스의 기능을 변경하지 않고 확장해야 한다.

- 파생 클래스는 기반 클래스 대신 사용될 수 있어야 한다.

- 인터페이스 규약을 지켜야 한다.

- 예를 들어, 자동차 인터페이스가 엑셀을 밟으면 앞으로 가야 하는데 뒤로 가도록 만들면 규약 위반이다.

4. 인터페이스 분리 원칙(Interface Segregation Principle - ISP)

- 클라이언트는 자신이 사용하지 않는 메서드에 의존하도록 강요되지 않아야 한다.

- 여러 개의 작은 인터페이스를 구현하는 것이 하나의 큰 인터페이스를 구현하는 것보다 낫다

- 요리를 할 때 재료 손질과 실제 요리를 나누면 각각에 대한 코드만 수정해주면 된다.

- 재료 손질 인터페이스를 고치면 재료 손질 클라이언트만 고치면 된다.

5. 의존성 역전 원칙(Dependency Inversion Principle - DIP)

- 고수준 모듈은 저수준 모듈에 의존해서는 안되며, 둘 모두 추상화에 의존해야 한다.

- 추상화를 통해 인터페이스와 의존성 주입을 사용하여 시스템을 유연하게 만든다.

- 역할에 의존해야 하지 구현에 의존하면 안된다.

- 역할과 구현을 철저히 분리하여 역할에만 충실하도록 만들어야 한다.

 

다형성만으로 DIP와 OCP를 지킬 수 없다. 이를 만족시킬 수 있는 무언가가 더 필요하다. 이를 스프링은 해결해준다.