๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
FrameWork/Spring Boot

[Spring] IoC, DL, DI ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

by yunamom 2022. 4. 15.
728x90
300x250

IOC (Inversion of Control), DL(Dependency Lookup), DI (Dependency Injection)

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ• ์ˆ˜ ์žˆ๋„๋ก ๋„์ž…๋œ ๊ธฐ๋Šฅ

 

โœจ IoC (Inversion of Control) ๋ž€? 

"์ œ์–ด์˜ ์—ญ์ „" ์ด๋ผ๋Š” ์˜๋ฏธ๋กœ, ๊ฐ์ฒด๋‚˜ ๋ฉ”์„œ๋“œ์˜ ํ˜ธ์ถœ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๊ฐ์ฒด์˜ ์ƒ์„ฑ์—์„œ๋ถ€ํ„ฐ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ๊ด€๋ฆฌ๊นŒ์ง€ ๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

โœจ IoC์˜ ์žฅ์  

๊ฐ์ฒด์˜ ์˜์กด์„ฑ์„ ์—ญ์ „์‹œ์ผœ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์ด๊ณ  ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ๊ฐ€๋…์„ฑ ๋ฐ ์ฝ”๋“œ ์ค‘๋ณต, ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

โœจ IoC์˜ ๋ถ„๋ฅ˜ ( DL / DI ) 


1. DL (Dependency Lookup)

"์˜์กด์„ฑ ๊ฒ€์ƒ‰" ์ด๋ผ๋Š” ์˜๋ฏธ๋กœ, ์ด๋Š” Bean์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•˜์—ฌ Bean์„ Lookupํ•˜๋Š” ๊ฒƒ ์ด๋‹ค.

/* ์•„๋ž˜์™€ ๊ฐ™์ด Bean์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋Š” XMLํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž */

<beans>
	<bean id="myObject" class="com.Yunamom.MyObject" />
</beans>

/* Java์—์„œ๋Š” ํ•ด๋‹น XML์˜ Bean ์ •๋ณด๋ฅผ ๋ณด๊ณ  ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์ฃผ์ž…ํ•˜๊ฒŒ ๋œ๋‹ค. */

String myConfigLoc = "classPath:myAppContext.xml";

AbstractApplicationContext appCtx = new GenericXmlApplicationContext(myConfigLoc);

MyObject myobject = appCtx.getBean("myObject:, MyObject.class);

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด MyObject ํด๋ž˜์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.


2. DI (Dependency Injection)

"์˜์กด์„ฑ ์ฃผ์ž…" ์ด๋ผ๋Š” ์˜๋ฏธ๋กœ, ์ด๋Š” ๊ฐ ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ž์‹ ์ด ์•„๋‹Œ ์™ธ๋ถ€(์ปจํ…Œ์ด๋„ˆ)์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ ์ด๋‹ค.

 

์ž๋ฐ”๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ง์ ‘ ํด๋ž˜์Šค์— new์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ DI๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋”ฉ์„ ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ปจํ…Œ์ด๋„ˆ(IoC)๊ฐ€ ์ด๋ฅผ ์ƒ์„ฑ์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ์ฝ”๋“œ์—์„œ ์ง์ ‘์ ์ธ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ๊ฐ ํด๋ž˜์Šค๋“ค์˜ ๋ณ€๊ฒฝ์ด ์ž์œ ๋กœ์›Œ ์ง€๋Š”๋ฐ, ์ด๋ฅผ ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๊ฐ ํด๋ž˜์Šค๋“ค๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’๊ฒŒ๋˜๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ํด๋ž˜์Šค๋“ค๊ฐ„์˜ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ํด๋ž˜์Šค ๋‚ด์—์„œ ๋งบ์–ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์Šคํ”„๋ง ์ž์ฒด์—์„œ ์„ค์ •์„ ํ†ตํ•ด ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์คŒ์œผ๋กœ์จ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฐ์ค€๋‹ค.

 

์Šคํ”„๋ง์—์„œ๋Š” ์˜์กด๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” xmlํŒŒ์ผ์—์„œ ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ<bean>ํƒœ๊ทธ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

<bean> ํƒœ๊ทธ์˜ ์†์„ฑ ์„ค๋ช…
id ๋นˆ ๊ฐ์ฒด์˜ ๊ณ ์œ ์ด๋ฆ„์œผ๋กœ, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋นˆ์— ์ ‘๊ทผํ•˜๋ฉฐ ์ค‘๋ณต๋˜์„œ๋Š” ์•ˆ๋œ๋‹ค.
name ๋นˆ ๊ฐ์ฒด์˜ ๋ณ„์นญ
class ์ƒ์„ฑํ•  ํด๋ž˜์Šค ์ด๋ฆ„ (๋นˆ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•  ํด๋ž˜์Šค์˜ ์ด๋ฆ„)
constructor-arg ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ๊ฐ’์„ ์ฃผ์ž…ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
property setter๋ฅผ ์ด์šฉํ•ด ๊ฐ’์„ ์ฃผ์ž…ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋Ÿฌํ•œ Bean ์„ค์ • ํŒŒ์ผ์„ ๋ฐ”ํƒ•์œผ๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ํ™•์ธํ•˜์—ฌ ์ฃผ์ž…ํ•œ๋‹ค.

์ด๋Š” ๊ฐ์ฒด ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ถ€ํ„ฐ ์ฃผ์ž… ๋ฐ›์•„์„œ, ์‹คํ–‰ ์‹œ์— ๋™์ ์œผ๋กœ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ปจํ…Œ์ด๋„ˆ(IoC)๊ฐ€ ํ๋ฆ„์— ์ฃผ์ฒด๊ฐ€ ๋˜์–ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์˜์กด ๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ฐธ๊ณ  : ๋งํฌ

728x90
300x250

์ฝ”๋“œ