MemberRepository는 회원 도메인 설계에서 보았듯, DB가 선정되지 않았기에 인터페이스로 구성했다.
메모리 회원 저장소 구현체
DB가 아직 확정되지 않았으므로, 가장 단순한 메모리 회원 저장소를 구현해서 우선은 개발을 진행할 수 있게 헀다.
※ 참고 : HashMap은 동시성 이슈가 발생할 수 있다. 실무에서는 이런경우에 CuncurrentHashMap을 사용한다.
회원 서비스
회원 서비스 인터페이스
회원 서비스 구현체
이렇게 하면, 회원 서비스 구현체에서 join을 통해 save를 호출하면, MemoryMemberRepository클래스의 save()가 호출되고, 마찬가지로 MemberServiceImpl에서 findMember를 호출하면, MemberRepository의 findById() 가 호출된다.
그리고, 특정 인터페이스에 대한 구현체가 하나일 경우, 인터페이스이름+Imp 이렇게 구현체의 이름을 작성해주는게 일반적임.