๐ ์ง๊ธ๊น์ง ๋ํ์ ์ธ IoC ํ๋ ์์ํฌ์ธ ์คํ๋ง ์์ด๋ IoC ๊ฐ๋ ์ ์ ์ฉํ์๋๋ฐ,
์ด๋ฒ์๋ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด IoC ์คํ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํด๋ณด๊ฒ ์ต๋๋ค.
์คํ๋ง์ IoC ํต์ฌ์ ๋น ํฉํ ๋ฆฌ(Bean Factroy)์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(Application Context)๊ฐ ์์ต๋๋ค.
์คํ๋ง์์๋ ๋น์ ์์ฑ๊ณผ ๊ด๊ณ์ค์ ๊ฐ์ ์ ์ด๋ฅผ ๋ด๋นํ๋ IoC ์ค๋ธ์ ํธ๋ฅผ ๋น ํฉํ ๋ฆฌ๋ผ ๋ถ๋ฆ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ข ๋ ํ์ฅํ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ด ๋์ ์ฐจ์ด์ ์
๋นํฉํ ๋ฆฌ๋ ๋น์ ์์ฑํ๊ณ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ IoC์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ท๊ณ ,
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ๋ชจ๋ ๊ตฌ์ฑ์์์ ์ ์ด ์์ ์ ๋ด๋นํ๋ IoC์์ง์ ๋๋ค.
๐ก ๋น(Bean)์ด๋?
์คํ๋ง์ด ์ ์ด๊ถ์ ๊ฐ์ง๊ณ ์ง์ ๋ง๋ค๊ณ ๊ด๊ณ๋ฅผ ๋ถ์ฌํ๋ ์ค๋ธ์ ํธ
์ฝ๊ฒ ๋งํ๋ฉด, ์คํ๋ง์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ IoC์ปจํ ์ด๋, ์คํ๋ง ์ปจํ ์ด๋ ๋๋ ๋น ํฉํ ๋ฆฌ๋ผ ๋ถ๋ฆ ๋๋ค.
(์์ผ๋ก๋ ์ด ๋์ ๊ฑฐ์ ๊ฐ์ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ ๊ฒ ๊ฐ๋ค.)
โ๏ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ์ฌ์ฉ
์ ๋ ธํ ์ด์ @Configuration, @Bean ์ฌ์ฉํด ๋น ํฉํ ๋ฆฌ๊ฐ DaoFactory๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ค๋๋ค.
@Configuration, @Bean์ด๋?
์ฐธ๊ณ : https://withseungryu.tistory.com/63?category=880574
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DaoFactory {
@Bean
public UserDao userDao(){
return new UserDao(connectionMaker());
}
@Bean
public ConnectionMaker connectionMaker(){
return new NConnectionMaker();
}
}
์ด ์ ๋ ธํ ์ด์ ๋ค๋ง์ผ๋ก ์คํ๋ง์ ๋น ํฉํ ๋ฆฌ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๊ฐ IoC ๋ฐฉ์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ ๋ ์ฌ์ฉํ ์๋ฒฝํ ์ค์ ์ ๋ณด๊ฐ ๋ ์ ์์ต๋๋ค.
์ด์ DaoFactory๋ฅผ ์ค์ ์ ๋ณด๋ก ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
ApplicationContext ํ์ ์ ์ค๋ธ์ ํธ์ด๋ฉฐ,
@Configuration์ด ์๊ธฐ ๋๋ฌธ์ AnnotaionConfigApplication์ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ค๋๋ค.
๋ง๋ค์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ก getBean()์ ์ฌ์ฉํด UserDao์ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
public class UserDaoTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
ApplicationContext context =
new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
//...์๋ต
}
}
โ๏ธ ์ค๋ธ์ ํธ ํฉํ ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ๋์์๋ฆฌ ๋น๊ต
์๋ ์ค๋ธ์ ํธ ํฉํ ๋ฆฌ ๋ฐฉ์์ผ๋ก ๋ง๋ DaoFactory๋ DAO ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ , DB ์์ฑ ์ค๋ธ์ ํธ์ ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋
์ ํ์ ์ธ ์ญํ ๋ง ํ์์ต๋๋ค.
ํ์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ IoC๋ฅผ ์ ์ฉํด์ ๊ด๋ฆฌํ ๋ชจ๋ ์ค๋ธ์ ํธ์ ๋ํ ์์ฑ๊ณผ ๊ด๊ณ ์ค์ ์ ๋ด๋นํด์ค๋๋ค.
์ฆ, ์ง์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ์ฝ๋๊ฐ ์๊ณ , ๊ทธ๋ฐ ์์ฑ์ ๋ณด์ ์ฐ๊ด๊ด๊ณ ์ ๋ณด๋ฅผ ๋ณ๋์ ์ค์ ์ ๋ณด๋ฅผ ํตํด ์ป์ต๋๋ค.
์ฝ๊ฒ ๋งํด, ์ค๋ธ์ ํธ ํฉํ ๋ฆฌ๊ฐ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋
๋ฒ์ฉ์ ์ด๊ณ ์ ์ฐํ ๋ฐฉ๋ฒ์ผ๋ก IoC ๊ธฐ๋ฅ์ ํ์ฅํ๊ธฐ ์ํด์์ ๋๋ค.
โ๏ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์ฅ์
- ํด๋ผ์ด์ธํธ๋ ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ ํด๋์ค๋ฅผ ์ ํ์๊ฐ ์๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ์ข ํฉ IoC์๋น์ค๋ฅผ ์ ๊ณตํด์ค๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ๋น์ ๊ฒ์ํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
์ฐธ๊ณ ๋ฌธ์ :
ํ ๋น์ ์คํ๋ง3 (์ด์ผ๋ฏผ)
'Back-end > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์์กด์ฑ ์ฃผ์ - DI (0) | 2020.08.02 |
---|---|
[Spring] ์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ (0) | 2020.08.02 |
[Spring] ์ค๋ธ์ ํธ ํฉํ ๋ฆฌ (0) | 2020.07.29 |
[Spring] ๊ฐ์ฒด์งํฅ์ DAO - ํ์ฅ (์ ๋ต ํจํด) (0) | 2020.07.27 |
[Spring] ๊ฐ์ฒด์งํฅ์ DAO - ๋ถ๋ฆฌ (ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด) (0) | 2020.07.27 |