πνλ‘κ·Έλλ¨Έμ€ λ°±μλ λ°λΈμ½μ€ 4κΈ° κ΅μ‘κ³Όμ μ λ£κ³ μ 리ν κΈμ
λλ€.π
Inversion of Control
- κΈ°μ‘΄μλ λͺ¨λ μ’
λ₯μ μμ
μ μ¬μ©νλ μͺ½μμ μ μ΄λ₯Ό νλ ꡬ쑰μλ€λ©΄, IOC(μ μ΄μ μμ )λ νλ μμν¬μ μν΄ μ μ΄κ° λλ ꡬ쑰
- μ¦, κ°μ²΄λ μμ μ΄ μ¬μ©ν κ°μ²΄λ₯Ό μ€μ€λ‘ μ ννκ³ μμ±νμ§ μμ
- μ ν리μΌμ΄μ
μ½λμ νλ¦μ μ¬μ©μκ° μ§μ μ μ΄νλ 'λΌμ΄λΈλ¬λ¦¬ μ¬μ©'κ³Ό λ€λ₯Έ ꡬ쑰
μμ‘΄μ±
- μ΄λ€ κ°μ²΄κ° νλ ₯νκΈ° μν΄ λ€λ₯Έ κ°μ²΄λ₯Ό νμλ‘ ν λ λ κ°μ²΄ μ¬μ΄μ μμ‘΄μ±μ΄ μ‘΄μ¬
- μμ‘΄μ±μ μ€ν μμ κ³Ό ꡬν μμ μ μλ‘ λ€λ₯Έ μλ―Έλ₯Ό κ°μ§
- μ»΄νμΌνμ μμ‘΄μ±: μ½λλ₯Ό μμ±νλ μμ μμ λ°μνλ ν΄λμ€ μ¬μ΄μ μμ‘΄μ±
- λ°νμ μμ‘΄μ±: μ ν리μΌμ΄μ
μ΄ μ€νλλ μμ μ κ°μ²΄ μ¬μ΄μ μμ‘΄μ±
κ²°ν©λ
- νλμ κ°μ²΄κ° λ³κ²½μ΄ μΌμ΄λ λμ κ΄κ³λ₯Ό λ§Ίκ³ μλ λ€λ₯Έ κ°μ²΄μκ² λ³νλ₯Ό μꡬνλ μ λ
- μ΄λ€ λ μμ μ¬μ΄μ μ‘΄μ¬νλ μμ‘΄μ±μ΄ λ°λμ§ν κ²½μ° λμ¨ν(μ½ν) κ²°ν©λ, λ°λμ§νμ§ μμ κ²½μ° λ¨λ¨ν(κ°ν) κ²°ν©λ
Dependency Injection
- κ°μ²΄κ° μ§μ μμ‘΄νλ κ°μ²΄λ₯Ό μμ±νκ±°λ κ΄λ¦¬νμ§ μκ³ , μΈλΆμμ μμ‘΄νλ κ°μ²΄λ₯Ό μ£Όμ
λ°λ λ°©μ
- μμ±μλ₯Ό ν΅ν΄μ κ°μ²΄λ₯Ό μ£Όμ
λ°λ ν¨ν΄μ μμ±μ μ£Όμ
λ°©μμ΄λΌ νκ³ , μ€νλ§μμ κΆμ₯νλ λ°©μ
ApplicationContext
- IoC 컨ν
μ΄λλ κ°μ²΄μ λν μμ±κ³Ό μ‘°ν©μ΄ κ°λ₯νκ²νλ νλ μμν¬
- μ€νλ§μμλ μ΄λ° IoC컨ν
μ΄λλ₯Ό ApplicationContext μΈν°νμ΄μ€λ‘ μ 곡
- BeanFactoryλ₯Ό μμνκ³ , κ°μ²΄μ λν μμ±, μ‘°ν©, μμ‘΄κ΄κ³μ€μ λ±μ μ μ΄νλ IoC κΈ°λ³ΈκΈ°λ₯μ BeanFactoryκ° λ΄λΉ
- Beanμ IoC Containerμ μν΄ κ΄λ¦¬λλ κ°μ²΄
κ·Έλ¦Ό μΆμ² λ°λ‘κ°κΈ°
μμ μ½λ
public interface MessageService {
void sendMessage(String message);
}
public class EmailService implements MessageService {
public void sendMessage(String message) {
System.out.println("Sending email: " + message);
}
}
public class SMSService implements MessageService {
public void sendMessage(String message) {
System.out.println("Sending SMS: " + message);
}
}
public class NotificationService {
private MessageService messageService;
public NotificationService(MessageService messageService) {
this.messageService = messageService;
}
public void sendNotification(String message) {
messageService.sendMessage(message);
}
}
@Configuration
public class AppConfig {
@Bean
public MessageService emailService() {
return new EmailService();
}
@Bean
public MessageService smsService() {
return new SMSService();
}
@Bean
public NotificationService notificationService() {
return new NotificationService(emailService());
}
}
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
NotificationService notificationService = context.getBean(NotificationService.class);
notificationService.sendNotification("Hello, World!");
}