OOP (Object-Oriented Programming)과 AOP (Aspect-Oriented Programming)은 소프트웨어 개발 방법론 또는 프로그래밍 패러다임의 두 가지 다른 관점을 나타냅니다.
OOP (Object-Oriented Programming)
개념: OOP는 객체 지향 프로그래밍을 나타냅니다. 이 패러다임은 프로그램을 객체들의 집합으로 모델링하고, 객체 간 상호 작용을 통해 프로그램을 작성합니다. 객체는 데이터 (속성 또는 상태)와 메서드 (동작 또는 행위)로 구성됩니다.
특징: 상속, 다형성, 캡슐화 등의 개념을 활용하여 코드를 구성합니다. 이로 인해 코드의 재사용성이 높아지고 유지 보수가 쉬워집니다.
예시: Java, C++, Python과 같은 언어는 객체 지향 프로그래밍을 지원하며, 클래스와 객체를 사용하여 코드를 구성합니다.
AOP (Aspect-Oriented Programming)
개념: AOP는 관점 지향 프로그래밍을 나타냅니다. 이 패러다임은 애플리케이션의 다양한 부분에 걸쳐 있는 "관점" 또는 "관심사"를 분리하여 모듈화하려는 노력을 기반으로 합니다. 주요 목표는 코드의 모듈화 및 재사용을 증가시키고, 코드의 가독성을 향상시키며 유지 보수를 단순화하는 것입니다.
특징: AOP는 핵심 비즈니스 로직과 별도로 "관심사"를 정의하고, 관심사가 적용될 지점을 결정합니다. 이를 통해 로깅, 보안, 트랜잭션 관리 등과 같은 관심사를 핵심 비즈니스 로직과 분리하여 구현할 수 있습니다.
예시: Spring Framework와 같은 프레임워크에서 AOP를 활용하여 트랜잭션 관리, 보안 등을 구현합니다.
차이점
OOP는 객체 지향 프로그래밍 패러다임으로, 주로 데이터와 해당 데이터를 조작하는 메서드를 객체로 모델링합니다. AOP는 코드를 "관심사"에 따라 모듈화하며, 주로 비즈니스 로직과는 별개로 나타납니다.
OOP는 프로그램의 구조화 및 재사용을 위해 사용되며, 클래스와 객체의 개념을 강조합니다. AOP는 코드의 횡단 관심사를 분리하기 위해 사용되며, 코드의 가독성 및 유지 보수를 개선합니다.
OOP는 객체 간의 관계를 정의하고 코드를 기능별로 조직화합니다. AOP는 핵심 비즈니스 로직 외의 관심사에 초점을 맞춥니다.
OOP는 주로 클래스와 객체를 활용하는데 반해, AOP는 관심사에 맞춰서 어드바이스(Advice), 포인트컷(Pointcut), 애스펙트(Aspect) 등의 용어와 개념을 사용합니다.