private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
"UserService는 UserRepository가 반드시 필요하고, 그걸 Spring이 대신 만들어서 넣어준다"
의존성 주입(Dependency Injection, DI)
spring은 앱 시작할 때 :
1. UserRepository를 먼저 생성한다.
2. UserService 생성하려고 보니까.
---> "어? 생성자에USerRepository가 필요하네?
3. 이미 만들어둔 UserRepository를 자동으로 넣어준다.
이 과정이 바로 생성자 주입.
private : 외부에서 멋대로 바꾸지 못하도록.
final : 한 번 주입되면 절대 바뀌지 않게하고, Service는 "의존 대상이 고정" 되어야 한다.
본사(Spring)가 POS를 준비해서 직원에게 지급.
Service는 Repository를 직접 만들지 않는다.
Spring이 만들어준 걸 "생성자로 받아서 쓴다"