: 소프트웨어 설계를 이해하기 쉽고 유연하고 유지보수가 쉽게 만들기 위해 나온 원칙
이 다섯가지가 있는데 다섯가지를 간략하게 설명해보면
: 한 클래스는 하나의 책임만 가져야한다.
그런데 하나의 책임이 약간 모호하다.
쉽게 생각하면 책임의 기준을 변경에 맞춰생각하면 된다.
만약 한 클래스의 변경이 있을때 다른 클래스에대한 파급효과가 작다면 SRP를 잘따른것이라고 생각한다.
: 확장에는 열려있고 수정에는 닫혀있어야한다.
클래스 내부 수정없이 동작을 확장할수있어야한다라는 의미이다.
객체지향에서는 이러한 것을 상속과 다형성으로 이 원칙을 지킬수있다.
: 프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위타입의 인스턴스로 바꿀수 있어야한다.
그러기 위해서는
: 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
한마디로 인터페이스의 기능이 너무 넓으면 안된다는 얘기다.
인터페이스가 명확하면 다른 클래스에대한 파급효과가 적을것이다.
: 추상화에 의존해야하고 구체화에 의존하면 안된다.
구현클래스에 의존하지말고 인터페이스에 의존하라라는 말이다.
이러한 원칙을 지키기 위해 스프링에서 의존성 주입을 사용한다.
인터페이스에 의존해야 코드 변경시 유연하게 변경가능하고 구현체에 의존하면 변경이 어려워진다.