[Spring] 스프링 핵심 원리(기본편) 강의 정리 - 0
🌱Spring - 스프링 핵심 원리
📖 다형성의 실세계 비유
:역할과 구현으로 세상을 구분


1. 자바 언어의 다형성을 활용
- 역할 = 인터페이스
- 구현 = 인터페이스를 구현한 클래스, 구현 객체
(공연 무대를 예로 들자면 로미오의 역할(인터페이스)를 장동건, 원빈등 다양한 배우(구현체)가 소화할 수 있다. 역할은 그대로지만 배우는 다양하게 바뀔 수 있다는 것.)
2. 객체를 설계할 때 역할과 구현을 명확히 구현해야 함
3. 객체 설계시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체를 만들기
📖 객체의 협력이라는 관계부터 생각하자
혼자 있는 객체는 없다.
클라이언트는 "요청"이고 서버는 "응답"이며 수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.
이후의 예제에서 객체 클라이언트는 OrderService.java 등을 말하고 객체 서버는 AppConfig.java등을 말한다
📖 자바 언어의 다형성
:오버라이딩을 떠올려보자
오버라이딩은 자바의 "기본 문법"이다.
- 오버라이딩 된 메서드가 실행
- 다형성으로 interface를 구현한 객체를 실행 시점에 유연하게 변경할 수 있다.
- 물론 클래스 상속 관계도 다형성, 오버라이딩 적용이 가능하다

:MemberRepository save를 호출하면, 실제 어떤 애가 호출 되냐면 예를 들어서 MemoryMeberRepository가 현재 들어가 있으면 MemoryMemberRepository의 save가 호출되고, jdbc MemberRepository의 객체가 들어가 있으면 그 jdbc Member repository의 save가 호출 되는 것이 "오버라이딩"이다.

위의 코드는 MemberService가 MemberRepository.interface를 선언해놓고 거기에 대해서 값을 MemoryMemberRepository에 대입함
그리고 MemberRepository.interface에는 JdbcMemberRepository도 넣을 수 있다.
(ex)
부모 = 인터페이스 자식 = 구현체
부모는 마음이 넓기 때문에 자식들을 다 품을 수 있지만 반대로 자식들은 부모 마음을 잘 모르기 때문에 부모를 자식이 대입하는건 안된다. (구현체가 인터페이스를 대입하는건 안됨)