A. Inversion of Control(IoC)이란 제어의 역전으로 프로그램의 제어 흐름을 프레임워크나 컨테이너에게 위임하는 개념. 일반적으로 객체의 생성과 생명주기를 개발자가 관리하는 것이 아니라 프레임워크가 관리하며, 프레임워크가 애플리케이션의 흐름을 제어.
스프링에서는 객체를 Bean이라고 함. 프로젝트가 실행될때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 스프링에서 자동적으로 수행해주는데 객체가 생성되는 곳을 Bean 컨테이너라고 부른다.
A. 의존성 주입은 객체 간의 의존 관계를 외부에서 설정하고 관리하는 디자인 패턴.
일반적으로 클래스가 다른 클래스에 의존하는 경우, 이러한 의존성을 클래스 내부에서 생성하거나 관리하면 결합도가 높아져 유연성이 감소한다. 의존성 주입은 이러한 문제를 해결하기 위해 객체의 의존성을 외부에서 주입한다.
출처: https://velog.io/@gillog/Spring-DIDependency-Injection
// 서비스 인터페이스
public interface MessageService {
String getMessage();
}
// 서비스 구현체
public class EmailService implements MessageService {
@Override
public String getMessage() {
return "Email message";
}
}
// 클라이언트 클래스
public class MyApplication {
private MessageService service;
// 의존성 주입을 통해 MessageService를 주입받음
public MyApplication(MessageService service) {
this.service = service;
}
public void processMessages() {
String message = service.getMessage();
System.out.println("Message: " + message);
}
}
// 메인 클래스
public class Main {
public static void main(String[] args) {
// 의존성 주입을 통해 EmailService를 MyApplication에 주입
MessageService service = new EmailService();
MyApplication app = new MyApplication(service);
app.processMessages();
}
}