์คํ๋ง ์ปจํ ์ด๋๋?
์คํ๋ง ์ปจํ ์ด๋๋ ์คํ๋ง ํ๋ ์ ์ํฌ์ ์ค์ฌ์์ ๋์ํ๋ ํต์ฌ ๊ตฌ์ฑ ์์
์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด(Bean)๋ฅผ ์์ฑํ๊ณ , ์ค์ ํ๋ฉฐ, ๊ด๋ฆฌํ๋ ์ญํ ์ ํจ. ์ด๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ๊ณผ ๊ตฌ์ฑ์ ๊ฐ์ํํ ์ ์๋ค.
์คํ๋ง ์ปจํ ์ด๋์ ์ฃผ์ ๊ธฐ๋ฅ
1. Bean ์์ฑ : ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ Bean์ ์์ฑ
2. ์์กด์ฑ ์ฃผ์ : ์ปจํ ์ด๋๋ Bean ๊ฐ์ ์์กด์ฑ์ ์ค์ ํจ
3. ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ : ๋น์ ์์ฑ๊ณผ ์๋ฉธ ๋ฑ์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ค.
4. ์ค์ ๊ด๋ฆฌ : ์ปจํ ์ด๋๋ ์ค์ ํ์ผ์ด๋ ์ด๋ ธํ ์ด์ ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์ ๊ด๋ฆฌํจ
์คํ๋ง ์ปจํ ์ด๋์ ์ข ๋ฅ
- ApplicationContext : ๋๋ถ๋ถ์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ์ปจํ ์ด๋. BeanFactory๋ฅผ ํ์ฅํ์ฌ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ง์
- BeanFactory : ๊ธฐ๋ณธ์ ์ธ ์ปจํ ์ด๋๋ก, DI( Dependency Injection) ๊ธฐ๋ฅ๋ง ์ ๊ณต. ๋ฉ๋ชจ๋ฆฌ์ ์ฑ๋ฅ ์ธก๋ฉด์์ ํจ์จ์
Bean์ด๋?
Bean์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธ
์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฑ๋๊ณ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ ๋ถ๋ฆ
Bean์ ์ปจํ ์ด๋์ ์ํด ์์ฑ๋๊ณ , ์ค์ ๋๋ฉฐ, ์๋ฉธ๋จ
์์กด์ฑ ์ฃผ์ ์ด๋?
์์กด์ฑ ์ฃผ์ (Dependency Injection, DI)์ ๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ฃผ์ ํ๋ ๋์์ธ ํจํด์ผ๋ก์จ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ฉฐ, ์ ์ฐ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ํฅ์์ํฌ ์ ์๋ค.
์์กด์ฑ ์ฃผ์ ์ ์ฅ์
- ๊ฒฐํฉ๋ ๊ฐ์
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ
- ํ ์คํธ ์ฉ์ด
- ์ ์ฐ์ฑ ํฅ์
์๋ฐ์์ ์ง์ ์์กด์ฑ ์ฃผ์ ๊ตฌํ
์คํ๋ง ์์ด ์๋ฐ๋ก ์์กด์ฑ์ ์ฃผ์ ์ ๊ตฌํํด๋ณด๋ฉด ์คํ๋ง์ ํธ๋ฆฌํจ์ ์ ์ ์๋ค.
1. ์ธํฐํ์ด์ค ์ ์
public interface Engine {
void start();
}
2. ์ธํฐํ์ด์ค ๊ตฌํ ํด๋์ค
public class V8Engine implements Engine {
public void start() {
System.out.println("V8 engine started");
}
}
3. Car ํด๋์ค ์ ์
public class Car {
private Engine engine;
// ์์ฑ์ ์ฃผ์
public Car(Engine engine) {
this.engine = engine;
}
public void drive() {
engine.start();
System.out.println("Car is driving");
}
}
4. Main ํด๋์ค์์ ๊ฐ์ฒด ์์ฑ ๋ฐ ์ฃผ์
public class Main {
public static void main(String[] args) {
// ์ง์ ๊ฐ์ฒด ์์ฑ ๋ฐ ์ฃผ์
Engine engine = new V8Engine();
Car car = new Car(engine);
car.drive();
}
}
์์กด์ฑ ์ฃผ์
์ ์ง์ ์ฝ๋๋ก ๊ตฌํํ์๋ค ์์ง ์ธํฐํ์ด์ค์ v8์์ง ๊ตฌํ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ carํด๋์ค๋ ์์ฑ์๋ฅผ ํตํด ์์ง ๊ฐ์ฒด๋ฅผ ์ฃผ์
๋ฐ์๋ค. ๋ฉ์ธํด๋์ค์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฃผ์
ํ์ฌ car๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๋ฐฉ์์ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋์์ง๊ณ , ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ํ๊ธฐ ์ฌ๋ฌ์ด ๋จ์ ์ด ์๋ค.
์คํ๋ง์์ ์์กด์ฑ ์ฃผ์ ๋ฐฉ๋ฒ
XML ์ค์ ๋ฐฉ๋ฒ
<beans>
<bean id="engine" class="com.example.V8Engine"/>
<bean id="car" class="com.example.Car">
<constructor-arg ref="engine"/>
</bean>
</beans>
์คํ๋ง Config ์ค์ ๋ฐฉ๋ฒ
@Configuration
public class AppConfig {
@Bean
public Engine engine() {
return new V8Engine();
}
@Bean
public Car car() {
return new Car(engine());
}
}
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์์กด์ฑ ์ฃผ์
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋์ฑ ๊ฐํธํ๊ฒ ์์กด์ฑ ์ฃผ์ ์ ์ค์ ํ ์ ์๋ค. ์ฃผ๋ก @Autowired ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ค.
์์ฑ์ ์ฃผ์ ์์ :
@Component
public class Car {
private final Engine engine;
@Autowired
public Car(Engine engine) {
this.engine = engine;
}
}
์ธํฐ ์ฃผ์
์์ :
@Component
public class Car {
private Engine engine;
@Autowired
public void setEngine(Engine engine) {
this.engine = engine;
}
}
@Autowired ์ด๋ ธํ ์ด์ :
@Autowired ์ด๋
ธํ
์ด์
์ ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์๋์ผ๋ก ํด๋น ํ๋๋ ๋ฉ์๋์ ์ ์ ํ Bean์ ์ฃผ์
ํ๋๋ก ์ง์ํ๋ ์ด๋
ธํ
์ด์
์. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์์กด์ฑ ์ฃผ์
์ ๊ฐํธํ๊ฒ ์ค์ ํ ์ ์์
์คํ๋ง ์ปจํ ์ด๋์ ์์กด์ฑ ์ฃผ์ ์ ์ฐ๊ด์ฑ
์คํ๋ง ์ปจํ ์ด๋๋ ์์กด์ฑ ์ฃผ์ ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฒด๋ค์ ๊ด๋ฆฌํ๊ณ , ํ์ํ ์์กด์ฑ์ ์๋์ผ๋ก ์ฃผ์ ํจ. ์ด๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์๋ค.
์ ๋ฆฌ
- ์คํ๋ง ์ปจํ ์ด๋๋ ๋น์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ฉฐ, ์์กด์ฑ ์ฃผ์ ์ ํตํด ๊ฐ์ฒด ๊ฐ์ ์ธ์กด ๊ด๊ณ๋ฅผ ์ค์ ํ๋ค.
- ์์กด์ฑ ์ฃผ์ ์ ๊ฐ์ฒด๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ฐ์ฑ์ ๋์ด๋ ์ค์ํ ๋์์ธ ํจํด์ด๋ค.
์คํ๋ง ์์ด ์๋ฐ๋ก ์ง์ ์์กด์ฑ ์ฃผ์ ์ ๊ตฌํํ ์ ์์ง๋ง, ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ๋ ๊ฐํธํ๊ณ ํจ์จ์ ์ผ๋ก ์์กด์ฑ ์ฃผ์ ์ ์ค์ ํ ์ ์๋ค. ์คํ๋ง์ XML์ค์ , java Config, ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ฃผ์ ๋ฐฉ๋ฒ์ ํตํด ๋ค์ํ๊ฒ ์์กด์ฑ์ ๊ด๋ฆฌ ํ ์ ์๋ค.
'๐์คํฐ๋ > ์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์ปดํฌ๋ํธ ์ค์บ ์๋ ๋น ๋ฑ๋ก (0) | 2024.05.19 |
---|---|
์คํ๋ง AOP (0) | 2024.05.19 |
์คํ๋ง MVC ๊ธฐ๋ณธ ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ํต์ฌ ๊ฐ๋ (0) | 2024.05.19 |