구현 클래스 추가 이미지
- MemberService는 현재 MemberRepository를 의존하고 있다.
- MemberRepository는 구현체로 MemoryMemberRepository, JdbcMemoryRepository가 있다.
↓↓↓↓↓↓
스프링 설정 이미지
그런데 스프링 컨테이너에서 설정을 어떻게 바뀌었는지 보자!
기존에는 메모리버전에 memberRepository스프링빈으로 등록했다면
이것을를 빼고 Jdbc memberRepository를 등록을 했다.
그리고 나머지는 손 댈 것이 없다.
이렇게 되면 구현체만 바껴서 돌아갈 것 이다.
SOLID 원칙 :
SOLID란 클린코드로 유명한 로버트 마틴이
좋은 객체 지향 설계의 5가지 원칙(SRP, OCP, LSP, ISP, DIP)의 앞 글자를 따서 만든 용어이다.
Open-Closed Principle(OCP, 개방-폐쇄 원칙)
: 확장에는 열려있고, 수정/변경에는 닫혀있다.
-> 객체지향에서 말하는 다형성을 잘 활용을 하면 이렇게 기능을 완전히 변경을해도
애플리케이션 전체를 수정할 필요가 없어진다.
물론, 조립하는 코드는 수정해야한다.
하지만 실제 애플리케이션이 동작하는데 필요한 코드들은 하나도 변경하지 않아도 된다.
Jdbc기반의 멤버리포지토리를 만들고 기존코드를 하나도 수정하지않았다.
이것의 스프링의 DI의 장점이다.
DI (Dependencies Injection)을 사용하면 기존 코드를 전혀 손대지 않고,
설정만으로 구현 클래스를 변경할 수 있다.