스프링 프레임워크의 핵심 3대 요소는 IoC(Inversion of Control), AOP(Aspect-Oriented Programming), 그리고 DI(Dependency Injection)입니다. 이 세 가지는 스프링 프레임워크의 기본 철학과 동작 원리를 이해하는 데 중요한 개념들입니다.


1. IoC (Inversion of Control) - 제어의 역전

  • 설명: 객체의 생성과 생명주기의 관리를 개발자가 아닌 스프링 컨테이너가 담당하는 개념입니다.
  • 핵심 원리:
    • 객체 생성, 의존성 관리, 소멸 등의 작업을 스프링이 대신 수행합니다.
    • 개발자는 객체의 구체적인 생성 방식을 신경 쓰지 않고, 필요한 객체를 사용할 수 있습니다.
  • 장점:
    • 객체 간의 결합도가 낮아져 유연성과 확장성이 높아짐.
    • 테스트와 유지보수가 용이.
  • 예시:
    스프링 컨테이너가 @Component 또는 XML 설정으로 정의된 객체를 생성 및 관리.
@Component
public class ExampleService {
    public void doSomething() {
        System.out.println("IoC Example");
    }
}

2. DI (Dependency Injection) - 의존성 주입

  • 설명: 객체 간의 의존성을 스프링 컨테이너가 주입하는 방식입니다.
    • 개발자가 객체의 의존성을 명시적으로 연결하지 않아도 됩니다.
    • 객체 간 결합도를 줄이고, 코드 재사용성을 높입니다.
  • 의존성 주입 방식:
    1. 생성자 주입:
      • 생성자를 통해 의존성을 주입.
    2. 세터 주입:
      • 세터 메서드를 통해 의존성을 주입.
    3. 필드 주입 (권장하지 않음):
      • 필드에 직접 @Autowired를 붙여 주입.
  • 예시:
@Component
public class ServiceA {
    private final ServiceB serviceB;

    // 생성자 주입
    public ServiceA(ServiceB serviceB) {
        this.serviceB = serviceB;
    }

    public void execute() {
        serviceB.perform();
    }
}

@Component
public class ServiceB {
    public void perform() {
        System.out.println("Dependency Injection Example");
    }
}

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

  • 설명: 공통으로 사용되는 기능(로깅, 트랜잭션, 보안 등)을 애플리케이션의 비즈니스 로직과 분리하여 모듈화하는 방법입니다.
    • 횡단 관심사(Cross-Cutting Concern)를 핵심 비즈니스 로직에서 분리.
    • 코드 중복을 줄이고, 유지보수를 용이하게 합니다.
  • 구성 요소:
    1. Aspect: 횡단 관심사를 모듈화한 코드.
    2. Advice: 언제 실행할지 정의 (Before, After, Around 등).
    3. Join Point: Advice가 실행될 수 있는 위치.
    4. Pointcut: Advice가 적용될 구체적인 조건.
  • 예시:
@Aspect
@Component
public class LoggingAspect {

    // Pointcut: 특정 패키지의 모든 메서드 실행 시 적용
    @Before("execution(* com.taehun.service.*.*(..))")
    public void logBeforeMethod(JoinPoint joinPoint) {
        System.out.println("AOP Before Advice: " + joinPoint.getSignature().getName());
    }
}

요약

요소 설명 장점
IoC 객체 관리 책임을 스프링에 위임 결합도 감소, 객체 생명주기 관리 자동화
DI 객체 간 의존성을 스프링이 주입 의존성 관리 간소화, 코드 재사용성 증가
AOP 횡단 관심사를 비즈니스 로직에서 분리 코드 중복 감소, 유지보수 및 확장성 향상

이 세 가지 요소를 이해하면 스프링 프레임워크의 설계 철학과 동작 원리를 잘 활용할 수 있습니다.

+ Recent posts