❗ 필요한 객체(의존성)는 직접 만들지 않고,외부(스프링)에서 넣어주는 것이 의존성 주입이야!
public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository()
MemberService는 회원과 관련된 기능을 제공하는 서비스 클래스memberRepository라는 변수를 선언하고,new MemoryMemberRepository() 해서 객체를 생성하고 있음**📌의존성 주입으로 고친 코드 (**MemberService)
@Service
public class MemberService {
private final MemberRepository memberRepository; ->이건 멤버 변수(필드) 선언, 이 클래스 안에서 공통적으로 계속 쓰일 저장소 객체를 담을 변수.
@Autowired
public MemberService(MemberRepository memberRepository) { ->생성자 (스프링이 자동으로 MemberRepository 구현체를 넘겨줘서
그걸 받아주는 역할을 함)
this.memberRepository = memberRepository; ->this.memberRepository는 위에서 선언한 멤버 변수
->memberRepository는 생성자의 매개변수(parameter)
}
}
@Service: 이 클래스 스프링이 관리해@Autowired: 이 생성자에 필요한 저장소를 자동으로 주입해줘**📌의존성 주입으로 고친 코드 (**MemberRepository)
@Repository
public class MemoryMemberRepository implements MemberRepository { -> MemberRepository가 정의한 기능들을 MemoryMemberRepository가 실제로 만든다!
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
...
@Repository:
@Autowired을 사용해서 스프링이 자동으로 MemoryMemberRepository객체를 주입해주려면 그 구현체가 스프링 빈으로 등록돼 있어야 된다.