인강을 듣던 객체지향에 대해서 공부하던 AOP라는 말이 계속 나오는데... 간단하게 설명해주셔서 이해가 잘 안되어 정리해본다.
Aop?
핵심로직과 부가기능을 분리하여 애플리케이션 전체에 결처 사용되는 부가기능을 모듈화하여 재사용할 수 있도록 지원하는 것
예를 들자면
class UserService{
void before(){}
void getUser(){}
void after(){}
}
class OrderService{
void before(){}
void getOrder(){}
void after(){}
}
각각의 Service의 핵심기능에서 바라보았을때 User와 Order는 공통된 요소가 없다. 하지만 부가기능 관점에서 바라보면 before와 after라는 메서드가 공통된 것을 확인할 수 있다.
기존 OOP에서 바라보던 관점과 다르게 부가기능적인 측면에서 보았을때 공통된 요소를 추출하자는 것
AOP 장점
AOP 주요개념
Aspect : 프로그램의 여러부분에 걸쳐 나타나는 관심심사 또는 특정한 기능을 나타냄 (로깅, 트랜젝션 관리, 보안등)
Join Point : Aspect가 코드에 적용될 수 있는 지점을 의미. 예를들어 메서드 호출이나 객체 생성시점등이 될 수 있음
Advice : Aspect의 특정작업을 수행하는 코드조각 (특정 Join Point에서 실행됨)
Pointcut : 어떤 Join Points에서 Advice를 실행할 것인지를 정의
Weaving : Aspect를 애플리케이션 코드에 결합하는 과정. 위빙은 컴파일 시간, 로드시간,런타임중에 언제든지 발생가능
OOP (Object-Oriented Programming)는 프로그래밍의 주요 패러다임 중 하나로, 객체와 클래스를 중심으로 프로그래밍하는 방식입니다. OOP의 주요 목적은 재사용성, 확장성, 유지보수성 등을 향상시키기 위한 것입니다.
AOP는 OOP를 보완하는 패러다임으로 볼 수 있습니다. OOP에서는 객체나 클래스를 중심으로 모듈화하는 반면, AOP에서는 특정 관심사나 측면을 중심으로 모듈화합니다.
즉, AOP는 OOP의 한계를 극복하기 위해 등장한 패러다임으로, 두 패러다임은 서로 보완적인 관계에 있습니다. AOP를 통해 OOP로 작성된 코드의 모듈성과 관심사의 분리를 더욱 향상시킬 수 있습니다.