-
AOP (Aspect Oriented Programming)
흩어진 코드를 한 곳으로 모아 (중복되어서 흩어져 있는 코드들)
-
중복된 코드
class A{
method a(){
중복 코드1
a
중복 코드2
}
method b(){
중복 코드1
b
중복 코드2
}
method c(){
중복 코드1
c
중복 코드2
}
}
-
모으기 (중복 코드를 별도로 빼놓은 것)
class A{
method a(){
a
}
method b(){
b
}
method c(){
c
}
method p(JoinPoint point){
중복코드1
point.execute();
중복코드2
}
}
- AOP 구현 방법
1. 컴파일 이용
A.java -> (AOP) -> A.class
자바 파일에는 특정 코드가 없지만 컴파일 한 코드에는 특정 코드가 들어간 것처럼 컴파일을 해주는 컴파일러 이용(aspectj가 제공)
2. 바이트코드 조작
A.java -> A.class
우리가 A라는 클래스를 사용할 때 이 클래스를 클래스 로더가 클래스를 읽어오는데, 읽어와서 메모리에 올릴 때 조작하는 것
특정 코드 없는 상태로 컴파일을 했는데 컴파일한 클래스 파일에도 없음 근데 클래스를 로딩할 때 그 시점에 메모리에서 메모리상에 이 클래스의 메소드에는 특정 코드가 들어가는 것
이것은 클래스로더에 특별한 옵션을 붙인 것, 그래서 클래스 로딩하는 시점에 바이트 코드를 조작한 것
그래서 메모리에 올라오는 클래스가 실제 로컬 머신에 있던 클래스와 다르다. (aspectj가 제공)
3. 프록시 패턴
이게 스프링 aop가 사용하는 방법
이건 디자인 패턴 중에 하나를 사용해서 aop와 같은 효과를 내는 방법
https://refactoring.guru/design-patterns/proxy
Proxy
There are dozens of ways to utilize the Proxy pattern. Let’s go over the most popular uses. Access control (protection proxy). This is when you want only specific clients to be able to use the service object; for instance, when your objects are crucial par
refactoring.guru
Real-World Analogy 그림 핵심!
기존의 코드를 다루지 않고 그 객체를 다른 객체로 바꾸는 방법
'Blog > Spring' 카테고리의 다른 글
스프링 프레임워크 입문 - AOP 적용 예제 (0) | 2020.04.19 |
---|---|
스프링 프레임워크 입문 - 프록시 패턴 (0) | 2020.04.19 |
스프링 프레임워크 입문 - 의존성 주입(Dependency Injection) (0) | 2020.04.19 |
스프링 프레임워크 입문 - Bean (0) | 2020.04.19 |
스프링 프레임워크 입문 - Inversion of Control (0) | 2020.04.19 |