π[Spring] @Component
μ΄λ
Έν
μ΄μ
.
-
@Component
μ΄λ Έν μ΄μ μ Spring Frameworkμμ λΉ(Bean) μΌλ‘ λ±λ‘ν ν΄λμ€λ₯Ό μ§μ νκΈ° μν΄ μ¬μ©νλ ν΄λμ€ λ 벨 μ΄λ Έν μ΄μ μ λλ€. - μ΄ μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ ν΄λΉ ν΄λμ€κ° Spring IoC 컨ν μ΄λμ μν΄ μλμΌλ‘ κ΄λ¦¬λλ λΉμΌλ‘ λ±λ‘λ©λλ€.
- μ£Όλ‘ μ ν리μΌμ΄μ μμ μλμΌλ‘ λΉμ λ±λ‘νκ³ μΆμ λ μ¬μ© λ©λλ€.
πββοΈ Spring 컨ν μ΄λ
πββοΈ Spring 컨ν μ΄λλ₯Ό μ¬μ©νλ μ΄μ
π Spring IoC 컨ν μ΄λμ Spring 컨ν μ΄λλ λ€λ₯Έ κ°λ μΈκ°μ?
Spring IoC 컨ν μ΄λμ Spring 컨ν μ΄λλ κ°μ κ°λ μ μλ―Ένλ μ©μ΄μ λλ€.
μ΄ λ μ©μ΄λ λͺ¨λ Spring Frameworkμμ κ°μ²΄(Bean, λΉ)μ μμ±, κ΄λ¦¬, μμ‘΄μ± μ£Όμ , μλͺ μ£ΌκΈ° κ΄λ¦¬ λ±μ λ΄λΉνλ 컨ν μ΄λλ₯Ό κ°λ¦¬ν΅λλ€.π κ°μ κ°λ μ λν λ€μν νν
- Spring IoC 컨ν μ΄λλ λ ꡬ체μ μΈ μ©μ΄λ‘, Springμμ Inversion Of Control(μ μ΄μ μμ ) μμΉμ ꡬννλ λΉ κ΄λ¦¬ μμ€ν μ κ°λ¦¬ν΅λλ€.
- μ΄ μ©μ΄λ μ£Όλ‘ μ μ΄μ μμ (Inversion of Control) μ΄λΌλ νλ‘κ·Έλλ° μμΉμ κ°μ‘°νκΈ° μν΄ μ¬μ©λ©λλ€.
- IoCλ κ°λ°μκ° μ§μ κ°μ²΄λ₯Ό μμ±νκ³ κ΄λ¦¬νμ§ μκ³ , 컨ν μ΄λκ° κ°μ²΄μ μμ±κ³Ό μμ‘΄μ±μ κ΄λ¦¬νλ λ°©μμ λλ€.
- Spring 컨ν μ΄λλ λ μΌλ°μ μΈ μ©μ΄λ‘, Spring Frameworkκ° μ 곡νλ κ°μ²΄ κ΄λ¦¬ μμ€ν μ κ°λ¦¬ν€λ ννμ λλ€.
- μ΄ μ©μ΄λ Springμ΄ μ 곡νλ 컨ν μ΄λμ κΈ°λ₯μ ν¬κ΄μ μΌλ‘ νννλ©°, κ·Έ ν΅μ¬ κΈ°λ₯μ IoC 컨ν μ΄λ μ λλ€.
π κ²°λ‘
- Spring IoC 컨ν μ΄λμ Spring 컨ν μ΄λλ κ°μ κ°λ μΌλ‘ λ³Ό μ μμΌλ©°, λ μ©μ΄ λͺ¨λ Springμ ν΅μ¬ κΈ°λ₯μΈ κ°μ²΄ κ΄λ¦¬μ μμ‘΄μ± μ£Όμ μ λ΄λΉνλ μμ€ν μ κ°λ¦¬ν΅λλ€.
IoC
λ μ΄ μ»¨ν μ΄λμ μλ μ리λ₯Ό μ€λͺ νλ μ©μ΄μ΄κ³ ,Spring 컨ν μ΄λ
λ μ΄λ₯Ό μΌλ°μ μΌλ‘ λΆλ₯Ό λ μ¬μ©νλ νννλλ€.
1οΈβ£ μ£Όμ κΈ°λ₯ λ° νΉμ§.
1. μλ λΉ λ±λ‘.
-
@Component
μ΄λ Έν μ΄μ μ΄ λΆμ ν΄λμ€λ Springμ μ»΄ν¬λνΈ μ€μΊ κ°λ₯μ μν΄ μλμΌλ‘ κ°μ§λκ³ , Spring IoC 컨ν μ΄λμ λΉμΌλ‘ λ±λ‘λ©λλ€. - κ°λ°μκ° μ§μ λΉμ λ±λ‘νλ λμ , Springμ΄ ν΄λμ€ κ²½λ‘μμ μ΄λ₯Ό νμνκ³ κ΄λ¦¬νκ² λ©λλ€.
2. λ€λ₯Έ νΉνλ μ΄λ Έν μ΄μ μ κΈ°λ°
-
@Component
λ Springμμ μΌλ°μ μΈ λΉμ λ±λ‘νλ μ©λλ‘ μ¬μ©λλ©°, μ΄λ₯Ό κΈ°λ°μΌλ‘ ν λ ꡬ체μ μΈ μ΄λ Έν μ΄μ μ΄ μμ΅λλ€. - μλ₯Ό λ€μ΄,
@Service
,@Repository
,@Controller
λ±μ΄@Component
μ νΉμνλ ννλ‘, κ°κ°μ μν μ λ§λ λΉμ ꡬ체μ μΌλ‘ μ μν©λλ€.-
@Service
: μλΉμ€ λ μ΄μ΄λ₯Ό μ μνλ ν΄λμ€μ μ¬μ©. -
@Repository
: λ°μ΄ν° μμΈμ€ λ μ΄μ΄(DAO)μ μ¬μ©. -
@Controller
: μΉ μ»¨νΈλ‘€λ¬(νλ μ ν μ΄μ λ μ΄μ΄)μ μ¬μ©.
-
3. κ°νΈν λΉ κ΄λ¦¬
-
@Component
λ νΉλ³ν μ€μ μμ΄ ν΄λμ€μ κ°λ¨ν μ΄λ Έν μ΄μ λ§ λΆμ¬μ Spring IoC 컨ν μ΄λμμ κ΄λ¦¬λλ λΉμΌλ‘ λ§λ€ μ μμ΅λλ€.- Springμ΄ μ 곡νλ κΈ°λ³Έμ μΈ λΉ λ±λ‘ λ°©μ μ€ νλμ λλ€.
2οΈβ£ μμ
@Component
public class MyComponent {
public void doSomething() {
System.out.println("Hello from MyComponent!");
}
}
- μ μ½λμμ
MyComponent
ν΄λμ€λ@Component
μ΄λ Έν μ΄μ λλΆμ Spring IoC 컨ν μ΄λμ μλμΌλ‘ λΉμΌλ‘ λ±λ‘λ©λλ€.- μ΄μ Springμ΄ μ΄ λΉμ κ΄λ¦¬νλ©°, λ€λ₯Έ κ³³μμ μμ‘΄μ± μ£Όμ μ ν΅ν΄ μ¬μ©ν μ μμ΅λλ€.
@Service
public class MyService {
private final MyComponent myComponent;
@Autowired
public MyService(MyComponent myComponent) {
this.myComponent = myComponent;
}
public void performAction() {
myComponent.doSomthing();
}
}
- μ΄ μμμλ
MyService
ν΄λμ€κ°MyComponent
λΉμ μ£Όμ λ°μ μ¬μ©ν©λλ€.-
MyComponent
κ° μλμΌλ‘ λΉμΌλ‘ λ±λ‘λμκΈ° λλ¬Έμ,@Autowired
λ₯Ό ν΅ν΄MyService
μ μ£Όμ λ μ μμ΅λλ€.
-
3οΈβ£ @Component
μ μ»΄ν¬λνΈ μ€μΊ
-
@Component
μ΄λ Έν μ΄μ μ΄ μ¬μ©λλ €λ©΄ Springμ΄ μ»΄ν¬λνΈ μ€μΊμ ν΅ν΄ ν΄λΉ ν΄λμ€λ₯Ό μ°ΎμμΌ ν©λλ€. - μΌλ°μ μΌλ‘
@ComponentScan
μ΄λ Έν μ΄μ μ΄λ Spring Bootμμλ@SpringBootApplication
μ΄λ Έν μ΄μ μ ν΅ν΄ μλμΌλ‘ μ»΄ν¬λνΈ μ€μΊμ΄ νμ±νλ©λλ€.
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}
- μ΄ μ½λμμ
@SpringBootApplication
μ@ComponentScan
μ ν¬ν¨νκ³ μμ΄,@Component
κ° λΆμ λͺ¨λ ν΄λμ€λ₯Ό μλμΌλ‘ κ²μνκ³ λΉμΌλ‘ λ±λ‘ν©λλ€.
4οΈβ£ @Component
μ λ€λ₯Έ λΉ λ±λ‘ λ°©μ λΉκ΅.
-
@Component
vs@Bean
-
@Component
λ ν΄λμ€ λ 벨μμ μλμΌλ‘ λΉμ λ±λ‘νλ©°, μ»΄ν¬λνΈ μ€μΊμ ν΅ν΄ Springμ΄ ν΄λμ€λ₯Ό κ°μ§ν©λλ€. -
@Bean
μ λ©μλ λ 벨μμ μλμΌλ‘ λΉμ λ±λ‘νλ λ°©μμΌλ‘, μλ° μ€μ ν΄λμ€(@Configuration
)λ΄μμ μ¬μ©λ©λλ€.- κ°λ°μκ° μ§μ λ©μλλ₯Ό ν΅ν΄ λΉμ μμ±νκ³ μ΄κΈ°νν μ μμ΅λλ€.
-
-
@Component
vs@Service
,@Repository
,@Controller
- μ΄λ€ μ΄λ
Έν
μ΄μ
μ λͺ¨λ
@Component
λ₯Ό κΈ°λ°μΌλ‘ νλ©°, νΉμ λ μ΄μ΄μ μν μ λνλ΄κΈ° μν΄ μ¬μ©λ©λλ€.- μλ₯Ό λ€μ΄,
@Service
λ μλΉμ€ κ³μΈ΅μ λνλ΄κ³ ,@Repository
λ λ°μ΄ν° μμΈμ€ κ³μΈ΅μ@Controller
λ νλ μ ν μ΄μ κ³μΈ΅μ λνλ λλ€.
- μλ₯Ό λ€μ΄,
- κΈ°λ₯μ μΌλ‘λ λμΌνμ§λ§, μν μ λ°λΌ μ΄λ Έν μ΄μ μ μ¬μ©ν¨μΌλ‘μ¨ μ½λμ κ°λ μ±κ³Ό μλ―Έλ₯Ό λ λͺ ννκ² ν μ μμ΅λλ€.
- μ΄λ€ μ΄λ
Έν
μ΄μ
μ λͺ¨λ
5οΈβ£ μΈμ μ¬μ©ν΄μΌ νλκ°?
-
μΌλ°μ μΈ λΉ λ±λ‘μ΄ νμν λ
- λΉμ¦λμ€ λ‘μ§, μ νΈλ¦¬ν° ν΄λμ€, λλ©μΈ κ°μ²΄ λ± Spring IoC 컨ν μ΄λμ μν΄ κ΄λ¦¬λμ΄μΌ νλ μΌλ°μ μΈ ν΄λμ€λ₯Ό λΉμΌλ‘ λ±λ‘ν λ μ¬μ©ν©λλ€.
-
νΉμ μν μ΄ μλ ν΄λμ€
-
@Service
,@Repository
,@Contoroller
μ κ°μ λͺ μμ μΈ μν μ΄ μλ κ²½μ°,@Component
λ₯Ό μ¬μ©νμ¬ ν΄λμ€λ₯Ό λΉμΌλ‘ λ±λ‘ν μ μμ΅λλ€.
-
6οΈβ£ κ²°λ‘ .
-
@Component
λ Spring μ ν리μΌμ΄μ μμ μλμΌλ‘ λΉμ λ±λ‘νλ λ° μ¬μ©λλ κΈ°λ³Έμ μΈ μ΄λ Έν μ΄μ μ λλ€.- μ΄λ₯Ό μ¬μ©νλ©΄ Spring IoC 컨ν μ΄λκ° ν΄λμ€ κ²½λ‘μμ μλμΌλ‘ ν΄λΉ ν΄λμ€λ₯Ό μ°Ύμ λΉμΌλ‘ κ΄λ¦¬νκ² λ©λλ€.
- μΌλ°μ μΈ λΉ λ±λ‘μ μν μ©λλ‘ μ¬μ©λλ©°, λ ꡬ체μ μΈ μν μ λνλ΄κΈ° μν΄
@Service
,@Repository
,@Controller
μ κ°μ νΉνλ μ΄λ Έν μ΄μ μ΄ μ‘΄μ¬ν©λλ€. -
@Component
λ κ°λ¨νκ² λΉμ κ΄λ¦¬νκ³ μ ν λ μ μ©νκ² μ¬μ©λ©λλ€.