스프링의 핵심 가치 = 객체지향 프로그래밍이다

그런다면 좋은 객체지향 프로그래밍이란?
--객체를 설계할 떄 역할과 구현을 명확히 분리해야 함--

==  구현을 뭐로 바꾸든 역할은 변함없어야한다 ==
1) SRP : 단일책임원칙
-한 클래스는 하나의 책임만 가져야한다
2) OCP : 개방-폐쇄 원칙 
- 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다 (다형성 의미)
3) LSP 리스코프 치환 원칙 : 

-프로그램의 객체는 정확성을 깨지 않으면서 하위 타입 인스턴스로 바꿀 수 있어야한다
4) ISP 인터페이스 분리 원칙 : 

-인터페이스 여러개가 범용 한개보다 낫다
5) DIP 의존관계 역전 원칙 : 

-추상화에 의존해야지 구체화에 의존하면 안된다 ( 인터페이스에 의존해라)

 

이를 위해 다형성이 중요하다! 하지만 다형성 만으로는 쉽게 갈아끼우듯 사용이 어려움 -> 스프링의 탄생

 

EX) 인터페이스1 = new 구현체 1

이라는 구문에서 구현체 1이 구현체 2로 바뀐다면?

---->정의하는 new 코드를 바꿔주어야한다

 

결국 해당 클래스는 인터페이스를 사용하며 DIP를 준수해서 추상화에 의존한것처럼 보였지만 

사실 인터페이스와 구현체 둘 전부에 의존해있는 상태인 것이다

-> 이러한 문제를 해결하기 위해 생성자 안에 무엇을 전달받던 그냥 받기만 하는 상태로 만들어

자신의 역할에만 집중할 수 있도록 해주고

누군가가 생성의 역할을 해줘야 좋은 설계이다. 그리고 이것이 스프링의 원리가 된다!

 

 

+ Recent posts