DI, IoC, AOP

Yeeun·2025년 5월 2일
0

SpringBoot

목록 보기
37/46

IoC (Inversion of Control) 제어의 역전

“객체 생성과 의존 관계를 직접 관리하지 않고, 스프링이 대신 해준다.”

  • 예전 방식: 객체를 new 해서 만들고 직접 연결
  • 스프링 방식: 객체 생성과 관계 주입을 스프링 컨테이너가 대신 처리

예시 (전통 방식 vs IoC 방식)

// 전통 방식
OrderService os = new OrderService(new ProductRepository());

// IoC (Spring이 관리함)
@Autowired
private OrderService orderService;

DI (Dependency Injection) 의존성 주입

“필요한 객체를 내가 직접 만들지 않고, 외부에서 주입받는다.”

IoC의 구체적인 방법 중 하나이며, 스프링에서 주로 사용하는 방식이에요.

DI 종류:

  1. 생성자 주입 (가장 권장)
  2. 세터 주입
  3. 필드 주입 (간단하지만 테스트 어려움)
// 생성자 주입 예시
@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

AOP (Aspect-Oriented Programming) 관점 지향 프로그래밍

“공통된 관심사(로그, 보안, 트랜잭션 등)를 핵심 로직에서 분리해서 관리하는 방식”

핵심 아이디어:

  • 핵심 로직과 **부가 기능(Aspect)**을 분리
  • 가로채기, 전처리, 후처리 등을 쉽게 구현 가능

예시: 메서드 실행 전후에 로그 출력

@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관점 지향공통 기능을 분리해서 코드 중복 제거

0개의 댓글