Spring

[Spring] AOP란?

dawn9 2022. 8. 23. 00:15

AOP(Aspect Oriented Programming)

관점 지향 프로그래밍이라고 불리며 OOP(Object Oriented Programming)를 보완하는 수단으로 흩어진 관심사(Crosscutting Concerns) 를 각 Aspect를 기준으로 로직을 모듈화하여 핵심 비즈니스 로직에 분리하여 재사용하는 기법.

주요 개념

  • Aspect: 관심사를 모듈화한 것으로 주로 부가기능을 모듈화함.
  • Target: Aspect를 적용하는 곳(클래스, 메소드 등)
  • Advice: 실질적으로 어떤 일을 해야할 지 에 대한 것으로 실질적인 부가기능을 담은 구현체
  • JoinPoint: Advice가 적용될 위치, 끼어들 수 있는 지점.(ex 메소드 진입 지점, 생성자 호출 지점, 필드에서 값을 꺼내올 시점 등)
  • PointCut: JointPoint의 상세한 스펙을 정의한 것으로 A란 메소드의 진입 시점에 호출할 것과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음.

스프링 AOP 특징

  • 프록시 기반의 AOP 구현체로 프록시 객체를 쓰는 이유는 기존 코드 변경하지 않고 접근 제어 및 부가기능을 추가하기 위함.
  • 스프링 빈에만 AOP 적용 가능.
  • 모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC(Inversion of Control)와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔히 발생하는 중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가와 같은 문제들에 대한 해결책을 지원하는 것이 목적.

Interface1.java

public interface Interface1{
	
    void create();
    void delete();
}

Service1.java

@Service
public class Service1 implements Interface1{

	@Override
    public void create(){
    	System.out.println("Created");
    }
	
    @Override
    public void delete(){
    	System.out.println("Deleted");
    }
}