“객체 생성과 의존 관계를 직접 관리하지 않고, 스프링이 대신 해준다.”
new 해서 만들고 직접 연결예시 (전통 방식 vs IoC 방식)
// 전통 방식
OrderService os = new OrderService(new ProductRepository());
// IoC (Spring이 관리함)
@Autowired
private OrderService orderService;
“필요한 객체를 내가 직접 만들지 않고, 외부에서 주입받는다.”
IoC의 구체적인 방법 중 하나이며, 스프링에서 주로 사용하는 방식이에요.
// 생성자 주입 예시
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
“공통된 관심사(로그, 보안, 트랜잭션 등)를 핵심 로직에서 분리해서 관리하는 방식”
예시: 메서드 실행 전후에 로그 출력
@Aspect
@Component
public class LogAspect {
@Before("execution(* com.example.service.*.*(..))")
public void beforeLogging() {
System.out.println("메서드 실행 전 로그");
}
@After("execution(* com.example.service.*.*(..))")
public void afterLogging() {
System.out.println("메서드 실행 후 로그");
}
}
| 개념 | 의미 | 역할 |
|---|---|---|
| IoC | 제어의 역전 | 객체 제어권을 개발자 → 프레임워크로 |
| DI | 의존성 주입 | IoC를 구현하는 구체적 방법 |
| AOP | 관점 지향 | 공통 기능을 분리해서 코드 중복 제거 |