๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’Š Java & Kotlin & Spring/- spring framework +

[Spring Framework] Spring์˜ ํ•ต์‹ฌ IoC/DI์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

by Wonit 2020. 9. 4.

์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ์‹œ๊ฐ„ ๋ฌด์—‡์ด Framework์ด๋ฉฐ ์™œ Spring์ด์–ด์•ผ ํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค.

Framework์˜ ํŠน์„ฑ์ด IoC, ์ฆ‰ ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๊ณ  ํ•˜์˜€๋Š”๋ฐ ์˜ค๋Š˜์€ ๊ทธ ์ œ์–ด์˜ ์—ญ์ „์— ์˜๋ฏธ์™€ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ œ์–ด๋ฅผ ์—ญ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ DI์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค.

๊ฒฐ๋ก ์„ ๋ฏธ๋ฆฌ ๋ง ํ•˜์ž๋ฉด Spring IoC Container๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์„ค์ •์„ ํ†ตํ•ด์„œ Bean์„ ๊ด€๋ฆฌํ•œ๋‹ค.

์ง€๊ธˆ ์ด ๋ง์„ ํ•˜๋‚˜๋„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด ์ •์ƒ์ด๋‹ค.


์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์ง๋ฉดํ–ˆ์œผ๋‹ˆ ํ•˜๋‚˜ ํ•˜๋‚˜ Divide And Conquer ๋ฅผ ํ•ด๋ณด์ž

 

์šฐ๋ฆฌ๋Š” ์œ„์˜ ๋ฌธ์žฅ์„ ์ž˜๊ฒŒ ๋‚˜๋ˆ ๋ณผ ๊ฒƒ์ด๋‹ค.

  • IoC Container
  • Bean
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

์ด 3 ๊ฐ€์ง€๋งŒ ์•Œ๋ฉด ์œ„์˜ ๋ฌธ์žฅ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์กฐ๊ธˆ ๊ฐˆ ๊ฒƒ ๊ฐ™๋‹ค.

IoC Container

Framework๊ณผ Library์— ์ฐจ์ด๋ฅผ ๊ตฌ๋ถ„์ง“๋Š” ์š”์†Œ๋Š” ๋ฐ”๋กœ ๋ˆ„๊ฐ€ ๊ฐœ๋ฐœ์˜ ์ฃผ๋„๊ถŒ์„ ๊ฐ–๋ƒ ๋ผ๊ณ  ํ–ˆ์—ˆ๋‹ค.


์šฐ๋ฆฌ๋Š” Framework๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ œ์–ด๋ฅผ ์—ญ์ „์‹œ์ผœ์•ผ ํ•˜๋Š”๋ฐ ๊ทธ ์—ญ์ „์‹œํ‚ค๋Š” ๋Œ€์ƒ์ด ๋ฐ”๋กœ IoC Container, Inversion Of Control ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

์œ„ํ‚คํ”ผ๋””์•„์—์„œ๋Š” ์ œ์–ด์˜ ์—ญ์ „์„ ๋ฐ”๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์žฌ์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ๋ฆ„ ์ œ์–ด๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด
๋ผ๊ณ  ์„ค๋ช…ํ•œ๋‹ค.

Spring์—์„œ๋Š” ์ด๋Ÿฌํ•œ IoC Container๊ฐ€ Metadata๋ฅผ ํ†ตํ•ด์„œ Bean๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค.

  • DI ์ปจํ…Œ์ด๋„ˆ
  • Spring ์ปจํ…Œ์ด๋„ˆ
  • ApplicationContext ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ์˜ค๋ธŒ์ ํŠธ
  • Bean Factory

๋ผ๋Š” ์—ฌ๋Ÿฌ ๊ด€์ ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ถˆ๋ฆฌ๋Š”๋ฐ ๊ทธ ์ค‘์— ํŠนํžˆ DI ์ปจํ…Œ์ด๋„ˆ๋Š” ์•„๋ž˜์„œ ์กฐ๊ธˆ ๋” ์•Œ์•„๋ณด์ž.

 

IoC ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ ์•„์ง Bean์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

Bean

Bean์€ ํ•˜๋‚˜์˜ Object๋กœ, Spring์ด ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์ง์ ‘ ๋งŒ๋“ค๋ฉฐ ๊ด€๊ณ„๋ฅผ ๋ถ€์—ฌํ•˜๋Š” Object์ด๋‹ค.


Bean์„ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ๋Š” POJO(Plain Old Java Object)์ธ ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•˜๊ธฐ๋„ ํ•œ๋‹ค.


์‰ฝ๊ฒŒ IoC Container์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” Object๋ฅผ Bean์ด๋ผ๊ณ  ํ•œ๋‹ค.


์ •ํ™•ํžˆ๋Š” ์œ„์—์„œ ์ž ๊น ์–ธ๊ธ‰ํ•œ DI ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค


์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋ฅผ POJO(Plain Object Java Object)๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์‚ฌ์ „์  ์ •์˜๋Š”

 

ํŠน๋ณ„ํ•œ ์ œํ•œ์— ์ข…์†๋˜์ง€ ์•Š๊ณ , ํด๋ž˜์Šค ํŒจ์Šค(class path)๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜์ ์ธ Java Object๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์ด์™€ ๊ด€๋ จํ•ด์„œ ๋” ๊นŠ์€ ๋‚ด์šฉ์€POJO๋ž€ ๋ฌด์—‡์ผ๊นŒ์—์„œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์„ ๊ถŒ๊ณ ํ•œ๋‹ค.


๋‹จ์ง€ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด์ผ ๋ฟ์ด์ง€ ๋‹ค๋ฅธ ์ผ๋ฐ˜ ์ž๋ฐ” ๊ฐ์ฒด์™€ ๋‹ค๋ฅผ ๊ฒƒ ํ•˜๋‚˜ ์—†์œผ๋‹ˆ Bean์ด๋ผ๊ณ  ํ•ด์„œ ํŠน๋ณ„ํ•œ ์กด์žฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ง๋„๋ก ํ•˜์ž.

 

์ด๋Ÿฌํ•œ Bean์€ Metadata์— ์˜ํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ ๋‚ด๊ฐ€ Bean์ด๋‹ˆ ๋‚˜๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ์„ธ์š” ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

DI Container

์Šคํ”„๋ง์—์„œ๋Š” IoC Container์ด๋ผ๋Š” ๋œป์ด ๋„ˆ๋ฌด ๋ชจํ˜ธํ•˜๊ณ  ๊ฐœ๋…์ ์ด๋ผ๋Š” ์ด์œ ๋กœ DI ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.


DI Container์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

  1. BeanFactory
  2. ApplicationContext

BeanFactory

Spring DI Container๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์„ ์šฐ๋ฆฌ๋Š” Bean์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, BeanFactory๋Š” ์ด๋Ÿฌํ•œ Bean์„ ๋“ฑ๋ก, ์ƒ์„ฑ, ์กฐํšŒ, ์†Œ๋ฉธ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.


BeanFactory๋Š” getBean()์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค.

 

์ด๋Ÿฌํ•œ BeanFactory๋Š” ๋ฐ”๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์ข€ ๋” ํ™•์žฅ๋œ ApplicationContext๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ApplicationContext

BeanFactory์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ApplicationContext๋Š” AOP, Message Handling, Event handling๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ApplicationContext๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ธ๋ฐ ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š”

  • ClassPathXmlApplicationContext
  • FileSystemXmlApplicationContext
  • GenericXmlApplicationContext
    ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

DI

Dependency Injection์€ ๋นˆ ์„ค์ • ํŒŒ์ผ์— ์˜์กด ๊ด€๊ณ„๊ฐ€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

 

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

Container์—๊ฒŒ Bean ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ฃผ๊ธฐ

์ด์ œ ๋Œ€์ถฉ IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ Bean์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , IoC๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด์„œ Bean ์ •๋ณด๋ฅผ ํ™•์ธํ•œ๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ metadata์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

 

metadata๋Š” ์„ค์ • ํŒŒ์ผ์ด๋‹ค.


์–ด๋–ค ๊ฐ์ฒด๊ฐ€ Bean์œผ๋กœ ๋“ฑ๋ก์ด ๋  ๊ฒƒ์ธ์ง€, ์–ด๋–ค ๊ฐ์ฒด์—๋Š” ์–ด๋–ค ๊ฐ’์ด ๋‹ด๊ฒจ์•ผ ํ• ์ง€, ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ Bean์œผ๋กœ ์‚ฌ์šฉ๋ ์ง€๋ฅผ ๊ธฐ์ˆ ํ•ด ๋†“๋Š” ํŒŒ์ผ์ด๋‹ค.

 

์ด๋Ÿฌํ•œ metadata๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹จ์ˆœํ•œ Class๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๊ณ , XML ํŒŒ์ผ์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ˜น์€ Field๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

Annotation Based Metadata

@Configuration
public class ApplicationConfig {

    @Bean
    public MyClass getService() {
        // Do something.
    }

    @Bean
    public MyClass1 getService() {
        // Do something.
    }
}

XML Based Metadata

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="hello2" class="Hello">
        <constructor-arg index="0" value="Spring"/>
        <constructor-arg index="1" ref="printer"/>
    </bean>

    <bean id="hello" class="Hello">
        <property name="name" value="Spring"/>
        <property name="printer" ref="printer"/>
    </bean>

    <bean id="printer" class="StringPrinter" />
    <bean id="consolePrinter" class="ConsolePrinter" />
</beans>

XML์œผ๋กœ Bean์„ ์ฃผ์ž…ํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ• (DI)

XML์—์„œ Bean์„ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. setter Injection
  2. constructor Injection

setter Injection

์˜์กด์„ฑ์„ ์ž…๋ ฅ๋ฐ›๋Š” Setter ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ํ†ตํ•ด์„œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค.


setter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” Bean์„ ์ฃผ์ž…ํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ xml ํŒŒ์ผ์—์„œ๋Š” <property> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

<bean id="hello" class="Hello">
        <property name="name" value="Spring"/>
        <property name="printer" ref="printer"/>
</bean>

์‹ค์ œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์€ ํ˜•์‹์— 2๊ฐ€์ง€ ํ˜•ํƒœ์˜ ์†์„ฑ ๊ฐ’์ด ์žˆ๋‹ค.

  • ref : ๊ธฐ์กด์— Bean์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋ฅผ Bean-name์„ ์ด์šฉํ•ด์„œ ๋ ˆํผ๋Ÿฐ์Šค ํƒ€์ž…์œผ๋กœ ์—ฐ๊ฒฐ์‹œํ‚จ๋‹ค.
  • value : ๋ ˆํผ๋Ÿฐ์Šคํƒ€์ž…์ด ์•„๋‹Œ Primitive ํƒ€์ž…์˜ ๊ฐ’์„ ์ฃผ์ž…ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๋‹จ์ 

์ด๋Ÿฌํ•œ setter Injection์—๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์กด์žฌํ•˜๋Š”๋ฐ, ๋ฐ”๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์˜์กด ๊ด€๊ณ„๋งŒ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Constructor Injection

Constructor Injection์€ ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผํ•œ๋‹ค.
Setter Injection๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” Bean์„ ์ฃผ์ž…ํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ <constructor-arg> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋Ÿฌํ•œ constructor Injection์—๋Š” 2๊ฐ€์ง€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

  1. index ์„ค์ •
  2. name ์„ค์ •

index ์„ค์ •

<bean id="hello" class="packagename.hello">
    <constructor-arg index="0" value="Spring"/>
    <constructor-arg index="1" ref="printer"/>
</bean>

name ์„ค์ •

<bean id="hello" class="packagename.hello">
    <constructor-arg name="name" value="Spring"/>
    <constructor-arg name="printer" ref="printer"/>
</bean>

๋งˆ์น˜๋ฉฐ

Spring IoC/Di ํŒŒํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋Š๊ผˆ๋˜ ์ ์€ ๋น„์Šทํ•œ ๊ฐœ๋…์„ ๊ฐ€์ง„ ์šฉ์–ด๊ฐ€ ๋งค์šฐ ๋งŽ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด์ด์ง€๋งŒ ์ •์ž‘ ์•Œ๊ณ  ๋ณธ๋‹ค๋ฉด ๋น„์Šทํ•œ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๋Š” ๋‹จ์–ด๋“ค์ด ๋งŽ์•˜๊ณ  ์ด๋“ค ์‚ฌ์ด์—์„œ๋„ ์„œ๋กœ ํ˜ผ์šฉ๋˜์–ด ๊ฐ์ž๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋‚˜๋ฅผ ํฌํ•จํ•œ ์ž…๋ฌธ์ž์—๊ฒŒ๋Š” ์กฐ๊ธˆ ํ˜ผ๋™์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์šฉ์–ด๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์šฉ์–ด์ผ ๋ฟ์ด์ง€ ์ •ํ™•ํ•œ Concept๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์—ฌ๋Ÿฌ ์šฉ์–ด๋ฅผ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด์„œ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

  • Bean
  • POJO
  • BeanFactory
  • ApplicationContext
  • configuration metadata
  • container
  • IoC-Container
  • Bean

 

Reference

๋Œ“๊ธ€