๐ง [๊ฐ๋ ํ์ธ ๋ฌธ์ ]
Q1. IoC์ DI์ ์ฐจ์ด๋ฅผ ๊ฐ๋จํ ์ค๋ช ํ๋ผ.
- ์ด๋ค ๊ด๊ณ์ธ๊ฐ?
- IoC๋ ๊ฐ์ฒด์ ์์ฑ, ์ฝ๋ ์คํ ์์ ๊ฒฐ์ ๋ฑ์ ์ ์ด๊ถ์ ๊ฐ๋ฐ์๊ฐ ์๋ ํ๋ ์์ํฌ๊ฐ ๊ฐ์ง๋ ๊ฒ์ผ๋ก, DI๋ผ๋ ์์กด์ฑ ์ฃผ์ ๋ฐฉ์์ ์ด์ฉํด ๊ตฌํ๊ฐ๋ฅํ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ด๋ค.
- ์ Spring์์๋ DI๊ฐ ์ค์ํ๊ฐ?
- Spring ์์๋ Bean์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ Container ๊ฐ ๊ด๋ฆฌํ๋๋ฐ, ์ด๋ ๊ฐ์ฒด๊ฐ์ ์์กด์ฑ์ ์ฃผ์ ํ๋ ๊ณผ์ ์ด ํ์์ ์ด๋ค.
[์ ๋ต]
- IoC : ๊ฐ์ฒด ์์ฑ, ์์กด์ฑ ์ฃผ์ , ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ๋ฑ์ ์ ์ด ๊ถํ์ ๊ฐ๋ฐ์๊ฐ ์๋, ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ๊ฐ์ง๋ ์ค๊ณ ์์น
- DI : IoC๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, ๊ฐ์ฒด๊ฐ ์์กดํ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๋์ , ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์
- Spring ์์ DI๊ฐ ์ค์ํ ์ด์ ? โ ๋์จํ ๊ฒฐํฉ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ, ํ ์คํธ ์ฉ์ด์ฑ, ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ์ ๋์ธ๋ค.
โ [OX ๋ฌธ์ ]
Q2. O / X
Spring์์ ๊ฐ์ฒด ์์ฑ ๋ฐ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ ๋์ , ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก new ํค์๋๋ฅผ ํตํด ํ์ํ ์์กด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
โ X
Q3. O / X
@Component, @Service, @Repository ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉด ํด๋น ํด๋์ค๋ ์คํ๋ง ์ปจํ ์ด๋์ ์ํด Bean์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
โ O
๐ [์ฝ๋ ๊ธฐ๋ฐ ๋ฌธ์ ]
Q4. ์๋ ์ฝ๋์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ ๋ฌด์์ด๋ฉฐ, ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ์์ ํด์ผ ํ ๊น?
public class OrderService {
private UserRepository userRepository;
public OrderService() {
this.userRepository = new UserRepository();
}
}
โ UserRepository ์ ๊ตฌํ์ฒด๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ ๋, ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฝ๋๋ฅผ ์์ ํด์ค์ผ ํ๋ค. ์์ ํ ๋ถ๋ถ์ด ์ ๋ค๋ฉด, ํ์ฌ ์ฝ๋๊ฐ ๊ตฌํ์ฒด๋ฅผ ๋ช ์์ ์ผ๋ก ๋ํ๋ธ๋ค๋ ์ ์์ ๊ฐ๋ ์ฑ์ ๋์์ง ์ ์์ผ๋, ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ฉด ์ค์์ ๊ฐ๋ฅ์ฑ์ด ๋์์ง.
UserRepository ํด๋์ค๋ฅผ Bean ์ผ๋ก ๋ฑ๋กํ์ฌ, ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ์ฌ DI ๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์ ํ ์ ์๋๋ก ํ๋ค.
๐ [์ ์ฉ ์์ฉ ๋ฌธ์ ]
Q5. ๋ค์ ์ค Spring์์ DI๋ฅผ ์ํํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์ณ์ง ์์ ๊ฒ์?
a) ์์ฑ์ ์ฃผ์
b) ํ๋ ์ฃผ์
c) Setter ์ฃผ์
d) ์ธํฐํ์ด์ค ์ฃผ์
โ d
[๋ฉด์ ๋๋น ์ง๋ฌธ]
-
Spring์์ IoC์ DI๋ ์ด๋ป๊ฒ ๋ค๋ฅด๊ณ ์ด๋ค ๊ด๊ณ์ธ๊ฐ์?
- IoC๋ ๊ฐ์ฒด ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ ๊ฐ์ ์ ์ด๊ถ์ ๊ฐ๋ฐ์๊ฐ ์๋, ์คํ๋ง ํ๋ ์์ํฌ์ ์ปจํ ์ด๋๊ฐ ๋ด๋นํ๋ ์ค๊ณ ์์น์ ๋๋ค.
- DI๋ IoC๋ฅผ ๊ตฌํํ๋ ๋ํ์ ์ธ ๋ฐฉ์์ผ๋ก, ๊ฐ์ฒด๊ฐ ์์กดํ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๋์ , ์ธ๋ถ์์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์์ ๋๋ค.
- ๋ฐ๋ผ์, IoC๋ ์ค๊ณ ์์น์ด๊ณ , DI๋ ์ด๋ฅผ ์ํ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋๋ค. ์คํ๋ง์ IoC ์ปจํ ์ด๋๋ฅผ ํตํด DI๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ํ ์คํธ์ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
-
์์กด์ฑ ์ฃผ์ ๋ฐฉ์ ์ค ์์ฑ์ ์ฃผ์ ์ด ๊ถ์ฅ๋๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
- ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ ๋ถ๋ณ์ฑ ๋ณด์ฅ, ์ํ ์ฐธ์กฐ ๋ฐฉ์ง, ํ ์คํธ ์ฉ์ด์ฑ ๋ฑ ์ฌ๋ฌ ์ธก๋ฉด์์ ๊ถ์ฅ๋ฉ๋๋ค.
- ํนํ ํ๋ ์ฃผ์ ์ private ์ ๊ทผ์ ๋๋ฌธ์ ํ ์คํธ ์ฝ๋์์ Mock ๊ฐ์ฒด ์ฃผ์ ์ด ์ด๋ ต๊ณ ,
- ์ธํฐ ์ฃผ์ ์ ์์กด์ฑ์ด ๋๋ฝ๋ ๊ฐ๋ฅ์ฑ์ด ์์ง๋ง,
- ์์ฑ์ ์ฃผ์ ๋ฐฉ์์ ๊ฐ์ฒด ์์ฑ ์์ ์ ํ์ํ ์์กด์ฑ์ ๋ชจ๋ ์ฃผ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ๋ช ํํ ์์กด์ฑ ํํ๊ณผ ์์ ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค.
-
์คํ๋ง์ Bean์ ์ด๋ป๊ฒ ์ฐพ๊ณ ์ฃผ์ ํ๋์? (์๋ ์ฃผ์ vs ์๋ ์ฃผ์ )
- ์คํ๋ง์ ์ปดํฌ๋ํธ ์ค์บ์ ํตํด ์คํ ๋ ์ค ํ์ ์ผ๋ก ์ ์ธ๋ ํด๋์ค๋ค์ ์๋์ผ๋ก ํ์งํ์ฌ Bean ์ผ๋ก ๋ฑ๋กํฉ๋๋ค.
- Bean ์ผ๋ก ๋ฑ๋กํ ํ์๋ @Autowired ์ ์์ฑ์ ์ฃผ์ ์ ํตํด ์์กด์ฑ์ ์ฃผ์ ํ ์ ์์ต๋๋ค.
- ์๋ ์ฃผ์ ์ธ์๋, ๊ฐ๋ฐ์๊ฐ ์ง์ @Bean๊ณผ @Configuration ์ ์ฌ์ฉํ์ฌ ์ง์ ๋น์ผ๋ก ๋ฑ๋กํ ์ ์์ต๋๋ค.
- ์๋ ์ฃผ์ ์ ์ฃผ๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Bean ์ผ๋ก ๋ฑ๋กํด์ผ ํ ๋, ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค.