@Autowired๋ณด๋ค ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ ๋ ๋ง์ด ์ฐ๋ ์ด์ ?
1. ๋ถ๋ณ์ฑ(immutability) ํ๋ณด : ์ค์ ๋ฐฉ์ง ( @Autowired๋ ๋์ค์ ๊ฐ์ด ๋ฐ๋๋ ๊ฑธ ๋ฐฉ์งํ ์ ์๋ค.)
2. ํ ์คํธ๊ฐ ์ฌ์์ง : Mock ์ฃผ์ ํ๋ ค๋ฉด Spring context ํ์ → ๋๋ฆผ
3. ์ํ ์ฐธ์กฐ ๋ฐฉ์ง์ ๋์ : ์์ฑ์ ์ฃผ์ ์ ์ํ ์ฐธ์กฐ๊ฐ ์์ผ๋ฉด ์ ์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋์ง ์์ → ๋ฌธ์ ๋ฅผ ์ด๊ธฐ์ ๋ฐ๋ก ๋ฐ๊ฒฌํ ์ ์์
Spring ๊ณต์ ๋ฌธ์์๋ ์์ฑ์ ์ฃผ์ ๋ฐฉ์ ๊ธฐ๋ณธ์ผ๋ก ์ฐ๋ผ๊ณ ๊ถ์ฅํ๊ณ ์๋ค๊ณ ํ๋ค.
๊ทธ๋์ ์์ฃผ์ฐ์ด๋ ์ง๊ฟ์ด @RequiredArgsConstructor๋ค.
@RequiredArgsConstructor
์ด๊ฑธ ํด๋์ค์ ๋ถ์ด๋ฉด,
final๋ก ์ ์ธ๋ ํ๋๋ค๋ง ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ฃผ๋ Lombok์์ ์ ๊ณตํ๋ ์ด๋
ธํ
์ด์
์ด๋ค.
์์
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
private final EmailService emailService;
private String someTempValue; // <- ์ด๊ฑด ์์ฑ์์ ํฌํจ๋์ง ์์
}
์ด๋ ๊ฒํ๋ฉด ์๋ ์์ฑ์๊ฐ ์๋ ์์ฑ๋๋ค.
public MemberService(MemberRepository memberRepository, EmailService emailService) {
this.memberRepository = memberRepository;
this.emailService = emailService;
}
์ฆ DI(์์กด์ฑ ์ฃผ์ )์ ์์ฃผ ์ฐ์ด๋ ํจํด!
| ์ํฉ | ์ฐ๋ฉด ์ข์ ์ด์ |
| ๋ถ๋ณ ๊ฐ์ฒด ์ค๊ณ | final ํ๋๋ง ๋ฐ๋ ์์ฑ์๋๊น ๊ฐ์ฒด์ ์ผ๊ด์ฑ ์ ์ง์ ์ ๋ฆฌ |
| ์คํ๋ง DI | ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ผ๋ก final ํ๋ ์ฃผ์ ๊ฐํธ |