์ ์ด์ ์ญ์
์ด๋ผ๋ ์๋ฏธ๋ก, ๋ง ๊ทธ๋๋ก ๋ฉ์๋๋ ๊ฐ์ฒด์ ํธ์ถ์์ ์ ๊ฐ๋ฐ์๊ฐ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์๋๋ผ, ์ธ๋ถ(ํ๋ ์์ํฌ๋ ์ปจํ ์ด๋)์์ ๊ฒฐ์ ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.- ๊ฐ๋จํ ๋งํด
์ ์ด์ ํ๋ฆ์ ๋ฐ๊พผ๋ค
๋ผ๊ณ ํ๋ค.
A
๊ฐ์ฒด๋ B
๊ฐ์ฒด์ ์์กดํ๊ณ ์๋ค๋ฅผ ๋ณด์ฌ์ค๋ค.public class A {
private B b;
public A() {
b = new B();
}
}
public class A {
@Autowired
private B b;
}
B๋ผ๋ ๊ฐ์ฒด๊ฐ ์คํ๋ง ์ปจํ
์ด๋์๊ฒ ๊ด๋ฆฌ๋๊ณ ์๋ Bean ์ด๋ผ๋ฉด @Autowired๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์ ์ ์๊ฒ ๋๋ค.
์ด๊ฒ์ ์คํ๋ง ์ปจํ
์ด๋์์ ์ง์ (์ ์ด) ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํด๋น ๊ฐ์ฒด์ ์ฃผ์
์์ผ์ค ๊ฒ์ด๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ์ ์ด๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ๋ค
๊ฐ๋ฐ์๊ฐ ํด์ผ ํ ์ ์ด๋ฅผ ์คํ๋ง ์ปจํ
์ด๋์์ ๋์ ํด์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๊ฒ์ด IoC ๋ผ๋ ๊ฐ๋
์ด๋ค.
๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค.
์ ์ฐํ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
๊ฐ๋ ์ฑ ์ฆ์ง
์ฝ๋ ์ค๋ณต ๋ฐฉ์ง
์ ์ง ๋ณด์ ์ฉ์ด
์์กด์ฑ ์ฃผ์
์ด๋ผ๋ ์๋ฏธ๋ก, ํด๋์ค ๊ฐ์ ์์กด์ฑ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฐ๋ ์ด๋ค.- ์คํ๋ง์ด ๋ค๋ฅธ ํ๋ ์์ํฌ์ ์ฐจ๋ณํ๋์ด ์ ๊ณตํ๋ ์์กด๊ด๊ณ ์ฃผ์ ๊ธฐ๋ฅ
๐พ ์์กด์ฑ : ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์์กดํ์ฌ ํด๋น ํด๋์ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ผ ํ๋ ์ํ๋ฅผ ๋งํ๋ค.
๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ ์๋๋ผ ์ธ๋ถ์์ ์์ฑํ ํ ์ฃผ์ ์์ผ์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ํด๋์ค๋ฅผ ์ค๊ณํ ๋, ์์กด์ฑ์ด ๋๊ฒ ๊ตฌ์ฑ๋์ด ์๋ค๋ฉด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง๊ณ ํ
์คํธํ๊ธฐ๋ ์ด๋ ค์ ์ง๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด DI๋ ์์กด์ฑ์ ์ธ๋ถ์์ ๊ด๋ฆฌํ๋๋ก ํ๋ค.
์ฆ, ํด๋์ค ๋ด๋ถ์์ ํ์๋ก ํ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๋์ , ์ธ๋ถ์์ ์ด๋ฅผ ์ฃผ์
๋ฐ๋๋ก ํ๋ค.
์์ฑ์ ์ฃผ์ (Constructor Injection)
์์ฑ์๋ฅผ ํตํด ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์
ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์์กด์ฑ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์์ฑ์๋ฅผ ํตํด ์ฃผ์
ํ๋ค๋ ๋ง์ด๋ค.
๊ฐ์ฒด ์์ฑ ์ 1ํ ํธ์ถ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฃผ์
๋ฐ์ ๊ฐ์ฒด๊ฐ ๋ถ๋ณ ๊ฐ์ฒด์ฌ์ผ ๋๊ฑฐ๋, ๋ฐ๋์ ๊ฐ์ฒด์ ์ฃผ์
์ด ํ์ํ ๊ฒฝ์ฐ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ค.
์์ฑ์๊ฐ 1๊ฐ๋ง ์์ ๊ฒฝ์ฐ @Autowired๋ฅผ ์๋ตํด๋ ์ฃผ์
์ด ๊ฐ๋ฅํ๋ค.
@Service
public class UserService {
private UserRepository userRepository;
private MemberService memberService;
@Autowired
public UserService(UserRepository userRepository, MemberService memberService) {
this.userRepository = userRepository;
this.memberService = memberService;
}
}
์์ ์ ์ฃผ์ (Setter Injection)
ํ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ setter()๋ฅผ ํตํด์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์
ํ๋ ๋ฐฉ๋ฒ
์ฃผ์
๋ฐ๋ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
์ ํ์ ์ธ ์์กด์ฑ์ ์ฌ์ฉํ ๋ ์ ์ฉํ๋ค.
์ํฉ์ ๋ฐ๋ผ ์์กด์ฑ ์ฃผ์
์ด ๊ฐ๋ฅํ๋ค.
@Autowired๋ก ์ฃผ์
ํ ๋์์ด ์๋ ๊ฒฝ์ฐ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ฃผ์
ํ ๋์์ด ์์ด๋ ๋์ํ๋๋ก ํ๋ ค๋ฉด @Autowired(required = false)๋ฅผ ํตํด ์ค์ ํ ์ ์๋ค.
@Service
public class UserService {
private UserRepository userRepository;
private MemberService memberService;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
}
์ต๊ทผ์ Spring์ ํฌํจํ DI ํ๋ ์์ํฌ์ ๋๋ถ๋ถ์ด ์์ฑ์ ์ฃผ์ ์ ๊ถ์ฅํ๊ณ ์๋ค.
์์ ์ ์ฃผ์ ์ ๋จ์
public์ผ๋ก ๊ตฌํํ๊ธฐ ๋๋ฌธ์, ๊ด๊ณ๋ฅผ ์ฃผ์
๋ฐ๋ ๊ฐ์ฒด์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ์ด์ด๋๋ค.
์ด๋ฐ ์ด์ ๋๋ฌธ์, ์์ ์ ์ฃผ์
๋ฐฉ์์ ์ฃผ์
๋ฐ๋ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ํ์์ฑ์ด ์์ ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค.
๋ณ๊ฒฝ์ ๊ฐ๋ฅ์ฑ์ ์ด์ด๋๋ฉด, ๋ค๋ฅธ ๊ณณ์์ ์์๋ก ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ํ์ด ๋๋ค.
๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ ํ๋ณด
๐พ ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ ํ๋ณดํ ์ ์๋ค.
๊ฐ์ฒด์ ์์ฑ์๋, ๊ฐ์ฒด ์์ฑ ์ 1ํ๋ง ํธ์ถ๋๋ค๋ ๊ฒ ๋ณด์ฅ๋๋ ํน์ง์ด ์๋ค.
์ด ํน์ง ๋๋ถ์ ์ฃผ์
๋ฐ์ ๊ฐ์ฒด๊ฐ ๋ถ๋ณ ๊ฐ์ฒด์ฌ์ผ ๋๊ฑฐ๋, ๋ฐ๋์ ํด๋น ๊ฐ์ฒด์ ์ฃผ์
์ด ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
์์ฑ์๋ก ํ๋ฒ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ฉด, ์์ฑ์๋ ๋ค์ ํธ์ถ๋ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ณด์ฅํ๋ค.
ํ
์คํธ ์ฝ๋์ ์์ฑ
๐พ ํ
์คํธ ์ฝ๋์ ์์ฑ์ด ์ฉ์ดํด์ง๋ค.
@Autowired๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ง๊ณผ ๊ฒฐํฉํ๋ฉด ํ ์คํธ๊ฐ ๋จ์ ํ ์คํธ๊ฐ ์๋๊ณ , ํ ์คํธ ๋น์ฉ์ด ์ฆ๊ฐํ ์ ์๋ค.
์ปดํ์ผ ์์ ์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์ฃผ์ ํ๋ ๊ฐ์ฒด๊ฐ ๋๋ฝ๋ ๊ฒฝ์ฐ ์ปดํ์ผ ์์ ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค.
ํนํ ์์ ์๋ฐ๋ก ์์ฑ๋ ํ ์คํธ ์ฝ๋์์๋ ์ธ๋ถ ์์กด์ฑ์ ๋ชจ์(Mock) ๊ฐ์ฒด๋ก ๋์ฒดํ์ฌ ์ ๋ ํ ์คํธ๋ฅผ ๋ ์ฝ๊ฒ ์ํํ ์ ์๋ค.
final ํค์๋ ์์ฑ ๋ฐ Lombok ๊ณผ์ ๊ฒฐํฉ
๐พ final ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , Lombok๊ณผ์ ๊ฒฐํฉ์ ํตํด ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์๋ค
์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ํ๋ ๊ฐ์ฒด์ final ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ปดํ์ผ ์์ ์ ๋๋ฝ๋ ์์กด์ฑ์ ํ์ผํ ์ ์๋ค.
Lombok์ @RequiredArgsConstructor๋ฅผ ํ์ฉํ๋ฉด ๊ฐ๊ฒฐํ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
์ํ ์ฐธ์กฐ ์๋ฌ ๋ฐฉ์ง
A๊ฐ์ฒด๊ฐ B๊ฐ์ฒด๊ฐ ์๋ก ์ฐธ์กฐํ๊ณ ์์ ๋ ๋ฐ์ํ๋ค.
์์ฑ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์์ (๊ฐ์ฒด์ ์์ฑ ์์ )์ ์ํ ์ฐธ์กฐ ์๋ฌ๋ฅผ ์๋ฐฉํ๋ค.
๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ณ ์ ์ฐ์ฑ์ด ๋์์ง๋ค.
๊ฐ๋ ์ฑ ๋ฐ ์ฝ๋ ์ค๋ณต, ์ ์ง ๋ณด์๋ฅผ ํธํ๊ฒ ํ ์ ์๊ฒ ํ๋ค.
[Spring] DI, IoC ์ ๋ฆฌ
IOC,DI ์ ์/์ฅ์
๋ค์ํ ์์กด์ฑ ์ฃผ์
๋ฐฉ๋ฒ๊ณผ ์์ฑ์ ์ฃผ์
์ ์ฌ์ฉํด์ผ ํ๋ ์ด์