객체 지향 프로그래밍(Object-Orientd Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
절차 지향 프로그래밍(Procedural-Oriented Programming, POP)은 단순히 순서대로 명령을 수행하는 것을 의미하는 것이 아닌 프로시저 호출의 개념을 바탕으로 하는 구조적 프로그래밍의 일종이다.
여기서 말하는 "절차"는 프로시저 혹은 함수로 해석해야 맞다.
관점 지향 프로그래밍(Aspect-Oriented Programming, AOP)은 횡단 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. (OOP를 더욱 발전시키기 위한 개념)
기존의 단순 OOP에서는 계좌이체, 입출금, 이자계산의 서비스가 각각의 OOP로 프로그래밍 되었고, 각각의 OOP 모두 기능 작동을 위해 로깅, 보안, 트랜잭션을 하는 코드가 구현되어 있었다.
여기서 계좌이체, 입출금, 이자계산 서비스가 공통되게 가지고 있는 로직이 있는 것을 알 수 있고, 이를 OOP 소스 코드에서 제거하고 외부로 빼내 하나의 공통 모듈로 만들 수 있는데, 이것이 바로 기존의 OOP에 AOP관점을 더해 발전시킨 기법이다.
Core Concern(핵심 관심) : 각 서비스의 핵심 비즈니스 로직
Crosscut Concern(횡단 관심) : 공통 모듈