[Spring Boot] ์์กด์ฑ ์ฃผ์ ํ ๋ ํ๋์ฃผ์ vs ์์ฑ์ ์ฃผ์ ?
์คํ๋ง์์๋ ์์ฑ์ ์ฃผ์ ์ด ๊ฐ์ฅ ๊ถ์ฅ๋จ.
๋ฐ๋ก ์์ ํฌ์คํ ์์
@RequiredArgsConstructor
@Service
public class UserService {
private final UserRepository userRepository;
}
์ด ์์ ๋ฅผ ๊ฐ๊ณ ์์๋๋ฐ, ์ด๊ฑด ์์ฑ์ ์ฃผ์ ์ผ๋ก DIํด์ฃผ๋ ์ฅ๋ฉด์.
โ
์ด๊ฑธ ํ๋ ์ฃผ์ ์ผ๋ก ํ๋ค๋ฉด?
@Autowired
private UserRepository userRepository;
์ด๋ ๊ฒ ๋จ.
์ด๋ ๊ฒ ํ๋ฉด ๋ฌธ์ ์ ์ด
์ผ๋จ userRepository๊ฐ final์ด ์๋๋ผ์ ๋ถ๋ณ์ฑ์ด ๊นจ์ง
๊ทธ๋ฆฌ๊ณ ์คํ๋ง์ด ์๋์ผ๋ก ๋ฃ์ด์ฃผ๋๊น ์์กด์ฑ ์ฃผ์ ์ด ใ ใท์ ๋๋์ง ์๋ณด์
์ ์์ฑ์ ์ฃผ์ ์ด ๋ ์ข์๊น? ๐
1. ๋ถ๋ณ์ฑ ๋ณด์ฅ (final ์ฌ์ฉ ๊ฐ๋ฅํ๋๊น)
final์ด ๋ถ์ด์ ์ค๊ฐ์ ์ค์๋ก ๋ฐ๊พธ๋ ์ผ๋ ์์๊ธฐ๊ณ , ์์ ์ ์ธ ์ฝ๋๊ฐ ๋จ.
์ฐธ๊ณ ๋ก ํ๋ ์ฃผ์ ์ (@Autowired) final๋ชป๋ถ์
โ
2. ์ํ ์ฐธ์กฐ ๋ฌธ์ ์ก์ ์ ์์
ํ๋ ์ฃผ์ ์, ๋จผ์ ๋น ์์ฑํ๊ณ , ์ฃผ์ ํ๋ ค๋ ๋น์ ์ฐพ์์ ์ฃผ์ ํจ.
๊ทผ๋ฐ ์์ฑ์ ์ฃผ์ ์ ๋จผ์ ์์ฑ์์ ์ธ์์ ์ฌ์ฉ๋๋ ๋น์ ์ฐพ๊ฑฐ๋ ๋น ํฉํ ๋ฆฌ์์ ๋ง๋ฆ.
= ์์ฑ์ด ๋จผ์ ๊ฐ ์๋๋ผ, ์ฃผ์ ํ๋ ค๋ ๋น ์ฐพ๋๊ฒ ๋จผ์ ์.
โ
๋ฐ๋ผ์ ์ฌ์ ์ ์ํ ์ฐธ์กฐ ๋ฐฉ์ง ์ํด์ ์์ฑ์ ์ฃผ์ ์ฐ๋๊ฒ ์ข
โ
3. ๋ช ํํ ์ฃผ์ ๊ตฌ์กฐ
“UserRepository๊ฐ ์์ผ๋ฉด ์ด ํด๋์ค๋ ๋์ ์์ฒด๊ฐ ์ ๋ผ”๋ผ๋ ๊ฑธ
์์ฑ์ ์๊ทธ๋์ฒ์์ ๊ฐ์ ํ๊ณ ๊ฐ์์ ์ผ๋ก ๋๋ฌ๋ผ ์ ์๋ค๋ ๊ฒ ํต์ฌ ํฌ์ธํธ
๋ผ๊ณ ์ฑ์งํผํฐ๊ฐ ๋งํด์ค
์๋ฅผ๋ค์ด
@RequiredArgsConstructor
@Service
public class BlogService {
private final BlogRepository blogRepository;
public Article save(AddArticleRequest request) {
return blogRepository.save(request.toEntity());
}
}
์ด ์ฝ๋๋ฅผ ๋ณด๊ณ
์ ์ด ํด๋์ค๋ BlogRepository๊ฐ ์์ผ๋ฉด ์์ฑ ์์ฒด๊ฐ ์๋๋๊ตฌ๋. ๊ผญ ํ์ํ๊ตฌ๋.
๋ผ๊ณ ํ๋์ ๋ณด๊ณ ๋๋ผ๋ฉด๋๋๊ฑฐ์.
public BlogService(BlogRepository blogRepository) {
this.blogRepository = blogRepository;
}
์ ์์ฑ์ ํ๋๋ง ๋ง๋ค์ด์ง๋๊ฑฐ์
(@NoArgsConstructor๋ @AllArgsConstructor๊ฐ ์์ผ๋๊น)