IoC (Inversion of Control, ์ ์ด์ ์ญ์ )
โข
๊ฐ์ฒด์งํฅ ์ธ์ด์์ Object ๊ฐ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ๋ฐํ์์ ๊ฒฐ์
โข
๊ฐ์ฒด ๊ด์ ๊ด๊ณ๊ฐ ๋์จํ๊ฒ ์ฐ๊ฒฐ๋จ (loose coupling)
โข
IoC์ ๊ตฌํ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ DI์ด๋ค.
IoC ์ ํ
Dependency Lookup(DL)
โข
์ปจํ
์ด๋๊ฐ lookup context๋ฅผ ํตํด์ ํ์ํ Resource๋ Object๋ฅผ ์ป๋ ๋ฐฉ์
โข
Lookup ํ Object๋ฅผ ํ์ํ ํ์
์ผ๋ก Casting ํด ์ฃผ์ด์ผ ํจ
โข
Naming Exception์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ก์ง์ด ํ์..
Deplendency Injection(DI)
โข
Object์ lookup ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ปจํ
์ด๋๊ฐ ์ง์ ์์กด ๊ตฌ์กฐ๋ฅผ Object์ ์ค์ ํ ์ ์๋๋ก ์ง์ ํด์ฃผ๋ ๋ฐฉ์
โข
Object๊ฐ ์ปจํ
์ด๋์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ ํ์๊ฐ ์์
โข
Lookup ๊ด๋ จ ์ฝ๋๋ค์ด Object ๋ด์์ ์ฌ๋ผ์ง
โข
Setter or Constructor๋ฅผ ์ฌ์ฉํจ
Container
Container
โข
๊ฐ์ฒด์ ์์ฑ, ์ฌ์ฉ, ์๋ฉธ์ ํด๋นํ๋ ๋ผ์ดํ์ฌ์ดํด์ ๋ด๋น
โข
๋ผ์ดํ์ฌ์ดํด์ ๊ธฐ๋ณธ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์
์ฌ์ฉ์ ํ์ํ ์ฃผ์ ๊ธฐ๋ฅ์ ์ ๊ณต
Container ๊ธฐ๋ฅ
โข
๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ
โข
Dependency ๊ฐ์ฒด ์ ๊ณต
โข
Thread ๊ด๋ฆฌ
โข
๊ธฐํ ์ดํ๋ฆฌ์ผ์ด์
์คํ์ ํ์ํ ํ๊ฒฝ
Container ํ์์ฑ
โข
๋น์ฆ๋์ค ๋ก์ง ์ธ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๋ค์ ๋ํด์๋ ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋๋๋ก ํ๊ธฐ ์ํจ
โข
์๋น์ค look up ์ด๋ Configuration์ ๋ํ ์ผ๊ด์ฑ์ ๊ฐ๊ธฐ ์ํจ
โข
์๋น์ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๊ฐ Factory ๋๋ Singleton ํจํด์ ์ง์ ๊ตฌํํ์ง ์์๋ ๋จ
IoC Container
โข
์ค๋ธ์ ํธ์ ์์ฑ๊ณผ ๊ด๊ณ์ค์ , ์ฌ์ฉ, ์ ๊ฑฐ ๋ฑ์ ์์
์ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋ ๋์ ๋
๋ฆฝ๋ ์ปจํ
์ด๋๊ฐ ๋ด๋น
โข
์ปจํ
์ด๋๊ฐ ์ฝ๋ ๋์ ์ค๋ธ์ ํธ์ ๋ํ ์ ์ด๊ถ์ ๊ฐ๊ณ ์์ด IoC๋ผ๊ณ ๋ถ๋ฆ
โข
์ด๋ฐ ์ด์ ๋ก, ์คํ๋ง ์ปจํ
์ด๋๋ฅผ IoC ์ปจํ
์ด๋๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํจ
โข
์คํ๋ง์์ IoC๋ฅผ ๋ด๋นํ๋ ์ปจํ
์ด๋์๋ BeanFactory, ApplicationContext๊ฐ ์์
Spring DI Container
โข
Spring DI Container๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋น(Bean)์ด๋ผ ํ๊ณ , ์ด ๋น๋ค์ ์๋ช
์ฃผ๊ธฐ(Life-Cycle)๋ฅผ ๊ด๋ฆฌํ๋ ์๋ฏธ๋ก ๋นํฉํ ๋ฆฌ(BeanFactory)๋ผ ํ๋ค.
โข
Bean Factory์ ์ฌ๋ฌ ๊ฐ์ง ์ปจํ
์ด๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ApplicationContext๋ผ ํ๋ค.
BeanFactory
โข
Bean์ ๋ฑ๋ก, ์์ฑ, ์กฐํ, ๋ฐํ ๊ด๋ฆฌ
โข
์ผ๋ฐ์ ์ผ๋ก BeanFactory๋ณด๋ค๋ ์ด๋ฅผ ํ์ฅํ ApplicationContxt ์ฌ์ฉ
โข
getBean() ๋ฉ์๋๊ฐ ์ ์๋์ด ์์
ApplicationContext
โข
Bean์ ๋ฑ๋ก, ์์ฑ, ์กฐํ, ๋ฐํ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ BeanFacotry์ ๊ฐ์
โข
Spring์ ๊ฐ์ข
๋ถ๊ฐ ์๋น์ค๋ฅผ ์ถ๊ฐ๋ก ์ ๊ณต
โข
Spring์ด ์ ๊ณตํ๋ AppicationContext ๊ตฌํํด๋์ค๋ ์ฌ๋ฌ ์ข
๋ฅ๊ฐ ์์(Web Application Context,,,)
IoC ๊ฐ๋
๊ฐ์ฒด ์ ์ด ๋ฐฉ์
โข
๊ธฐ์กด : ํ์ํ ์์น์์ ๊ฐ๋ฐ์๊ฐ ํ์ํ ๊ฐ์ฒด ์์ฑ ๋ก์ง ๊ตฌํ
โข
IoC : ๊ฐ์ฒด ์์ฑ์ Container์๊ฒ ์์ํ์ฌ ์ฒ๋ฆฌ
IoC ์ฌ์ฉ์ ๋ฐ๋ฅธ ์ฅ์
โข
๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋จ์ด๋จ๋ฆด ์ ์์ (loose coupling)
๊ฐ์ฒด๊ฐ ๊ฐํ ๊ฒฐํฉ
โข
ํด๋์ค ํธ์ถ ๋ฐฉ์
โข
ํด๋์ค๋ด์ ์ ์ธ๊ณผ ๊ตฌํ์ด ๋ชจ๋ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ค์ํ ํํ๋ก ๋ณํ๊ฐ ๋ถ๊ฐ๋ฅ
public class HomeController{
private MeberServiceImpl memberService = new MemberServiceImpl();
private AdminServiceImpl memberService = new AdminServiceImpl();
public void addUser(MemberDto memberDto){
memberService.joinMember(memberDto);
adminService.registerMember(memberDto);
}
}
Java
๋ณต์ฌ
โข
HomeContoller์์ MemberService์ ๊ตฌํ์ฒด์ AdminService์ ๊ตฌํ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์ง์ ๋ณ๊ฒฝํด์ผํจ
โข
ํด๋น ํด๋์ค๊ฐ ์ ์ง๋ณด์ ๋ ๋ ๊ทธ ํด๋์ค์ ๊ฒฐํฉ๋ ๋ค๋ฅธ ํด๋์ค๋ ๊ฐ์ด ์ ์ง๋ณด์ ๋์ด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ๋์ (๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋๊ฐ ๋์
IoC ๊ฐ๋
๊ฐ์ฒด ๊ฐ์ ๊ฐํ ๊ฒฐํฉ์ ๋คํ์ฑ์ ํตํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค
โข
์ธํฐํ์ด์ค ํธ์ถ ๋ฐฉ์
โข
๊ตฌํ ํด๋์ค ๊ต์ฒด๊ฐ ์ฉ์ดํ์ฌ ๋ค์ํ ํํ๋ก ๋ณํ ๊ฐ๋ฅ
โข
ํ์ง๋ง ์ธํฐํ์ด์ค ๊ต์ฒด ์ ํธ์ถ ํด๋์ค๋ ์์ ํด์ผ ํจ
๊ฐ์ฒด ๊ฐ์ ๊ฐํ ๊ฒฐํฉ์ Factory๋ฅผ ํตํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค
โข
ํฉํ ๋ฆฌ ํธ์ถ ๋ฐฉ์
โข
ํฉํ ๋ฆฌ ๋ฐฉ์์ ํฉํ ๋ฆฌ๊ฐ ๊ตฌํ ํด๋์ค๋ฅผ ์์ฑํ๋ฏ๋ก ํด๋์ค๋ ํฉํ ๋ฆฌ๋ฅผ ํธ์ถ
โข
์ธํฐํ์ด์ค ๋ณ๊ฒฝ ์ ํฉํ ๋ฆฌ๋ง ์์ ํ๋ฉด ๋จ. ํธ์ถ ํด๋์ค์๋ ์ํฅ์ ๋ฏธ์น์ง ์์
โข
ํ์ง๋ง ํด๋์ค์ ํฉํ ๋ฆฌ๋ฅผ ํธ์ถํ๋ ์์ค๊ฐ ๋ค์ด๊ฐ์ผํจ(๊ทธ๊ฒ ์์ฒด๊ฐ ํฉํ ๋ฆฌ์ ์์กดํจ)
๊ฐ์ฒด ๊ฐ์ ๊ฐํ ๊ฒฐํฉ์ Assembler๋ฅผ ํตํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค (์ต์ข
์งํ - Spring)
โข
IoC ํธ์ถ ๋ฐฉ์
โข
ํฉํ ๋ฆฌ ํจํด์ ์ฅ์ ์ ๋ํ์ฌ ์ด๋ ํ ๊ฒ์๋ ์์กดํ์ง ์๋ ํํ๊ฐ ๋จ
โข
์คํ์์ (Runtime)์ ํด๋์ค ๊ฐ์ ๊ด๊ณ๊ฐ ํ์ฑ์ด ๋จ
โข
๊ธฐ์กด์ Factory ๋ฐฉ์์ ๊ฒฐํฉ๋๊ฐ ๋์จํด์ง๊ธฐ๋ ํ์ง๋ง ์ฌ์ ํ ์๋ฐ ์ฝ๋๊ฐ ์์ ๋๋ฉด ๋น๋๋ฅผ ๋ค์ํด์ ๋ฐฐํฌํด์ผํ๋ ๋ฌธ์ ๊ฐ ์กด์ฌ! ์ธ๋ถ์ ์กฐ๋ฆฝ๊ธฐ(Assembler)๋ฅผ ์ฌ์ฉํด์ ์ด๋ฐ ์ผ์ ๋ฐฉ์งํจ!!
โข
Spring Container๊ฐ ์ธ๋ถ์กฐ๋ฆฝ๊ธฐ(Assembler) ์ญํ ์ ํจ