스프링 프레임워크의 핵심 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) - 의존성 주입
- 설명: 객체 간의 의존성을 스프링 컨테이너가 주입하는 방식입니다.
- 개발자가 객체의 의존성을 명시적으로 연결하지 않아도 됩니다.
- 객체 간 결합도를 줄이고, 코드 재사용성을 높입니다.
- 의존성 주입 방식:
- 생성자 주입:
- 생성자를 통해 의존성을 주입.
- 세터 주입:
- 세터 메서드를 통해 의존성을 주입.
- 필드 주입 (권장하지 않음):
- 필드에 직접
@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)를 핵심 비즈니스 로직에서 분리.
- 코드 중복을 줄이고, 유지보수를 용이하게 합니다.
- 구성 요소:
- Aspect: 횡단 관심사를 모듈화한 코드.
- Advice: 언제 실행할지 정의 (Before, After, Around 등).
- Join Point: Advice가 실행될 수 있는 위치.
- 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 | 횡단 관심사를 비즈니스 로직에서 분리 | 코드 중복 감소, 유지보수 및 확장성 향상 |
이 세 가지 요소를 이해하면 스프링 프레임워크의 설계 철학과 동작 원리를 잘 활용할 수 있습니다.
'Spring Framework' 카테고리의 다른 글
스프링 프레임워크에서의 메타데이터 (0) | 2024.08.11 |
---|---|
빈 팩토리(BeanFactory)와 팩토리 빈(FactoryBean) (0) | 2024.08.11 |
Dependency Injection (DI : 의존성주입) (0) | 2024.08.07 |
스프링 IoC(Inversion of Control) 컨테이너 (0) | 2024.08.07 |
JUnit 단위 테스트 라이프사이클 (0) | 2024.08.07 |