본문 바로가기
Development News/Development

AOP vs OOP vs POP: 프로그래밍 패러다임을 쉽게 이해하기

by Maccrey Coding 2024. 9. 9.
반응형

프로그래밍에는 다양한 패러다임(방식)이 존재하는데요, 이 중에서도 AOP, OOP, POP는 가장 흔히 접할 수 있는 개념입니다.

이 글에서는 이 세 가지 패러다임이 무엇인지, 어떻게 다른지, 그리고 각각의 장단점을 초보자들도 쉽게 이해할 수 있도록 예시와 함께 설명해드리겠습니다.

1. POP (Procedural Oriented Programming)

개념

POP(절차적 프로그래밍)은 가장 기본적인 프로그래밍 패러다임입니다.

이 방식에서는 프로그램을 절차(함수)로 나누어 실행하는 것이 특징입니다. 프로그램의 흐름은 순차적으로 함수들을 호출하여 이루어집니다.

예시

간단한 계산기를 예로 들어볼까요? 두 숫자를 더하는 프로그램을 POP 방식으로 작성해보겠습니다.

def add(a, b):
    return a + b

def main():
    num1 = 5
    num2 = 10
    result = add(num1, num2)
    print("결과:", result)

main()

이 코드에서는 add 함수가 두 숫자를 더하는 기능을 담당하고, main 함수가 프로그램의 흐름을 제어합니다.

즉, 각 함수가 독립적으로 존재하며 순차적으로 호출됩니다.

장점

  • 이해하기 쉽고 구현이 간단합니다.
  • 작은 규모의 프로그램에서 유용합니다.

단점

  • 코드가 복잡해지면 관리하기 어려워집니다.
  • 코드의 재사용성과 유지보수성이 떨어질 수 있습니다.

2. OOP (Object Oriented Programming)

개념

OOP(객체 지향 프로그래밍)는 데이터를 객체라는 단위로 묶어서 처리하는 방식입니다.

객체는 데이터와 그 데이터를 처리하는 메서드를 함께 가지고 있으며, 이 객체들이 상호작용하며 프로그램을 구성합니다.

예시

이번에는 같은 계산기를 OOP 방식으로 작성해보겠습니다.

class Calculator:
    def __init__(self):
        self.result = 0

    def add(self, a, b):
        self.result = a + b
        return self.result

    def get_result(self):
        return self.result

def main():
    calc = Calculator()
    result = calc.add(5, 10)
    print("결과:", result)

main()

여기서는 Calculator 클래스가 숫자를 더하는 기능을 가지며, add 메서드와 get_result 메서드가 포함되어 있습니다.

이렇게 객체 지향 프로그래밍은 데이터와 기능을 객체로 묶어서 다룹니다.

장점

  • 코드의 재사용성과 유지보수성이 높습니다.
  • 큰 규모의 프로젝트에서 효과적입니다.

단점

  • 처음 배우기에는 복잡할 수 있습니다.
  • 작은 프로그램에서는 과도할 수 있습니다.

3. AOP (Aspect Oriented Programming)

개념

 

 

AOP는 "관점 지향 프로그래밍"이라고도 불리며, 소프트웨어 개발에서 공통적으로 사용되는 기능을 코드의 핵심 로직과 분리하여 처리하는 방식입니다. AOP는 프로그램의 공통적인 관심사를 모듈화하여 코드의 재사용성을 높이고, 유지보수를 용이하게 합니다.

 

1. Join Point (조인 포인트):

  • Join Point는 Aspect가 적용될 수 있는 프로그램의 특정 지점입니다. 예를 들어, 메서드 호출 전, 후, 또는 예외가 발생할 때 등이 조인 포인트가 될 수 있습니다.

2. Advice (조언):

  • Advice는 Aspect가 조인 포인트에서 수행할 작업입니다. 메서드 실행 전후에 로깅을 추가하거나, 메서드 실행 중 예외가 발생했을 때 특정 작업을 수행할 수 있습니다. 주요 Advice 유형에는 Before, After, Around 등이 있습니다.
    • Before Advice: 메서드 호출 전에 실행됩니다.
    • After Advice: 메서드 호출 후에 실행됩니다.
    • Around Advice: 메서드 호출 전후로 실행되며, 메서드의 실행을 제어할 수 있습니다.

3. Pointcut (포인트컷):

  • Pointcut은 Aspect가 적용될 조인 포인트를 정의하는 표현식입니다. 어떤 메서드, 클래스, 또는 특정 조건을 만족하는 지점을 지정하여 그 지점에서 Aspect의 Advice가 적용되도록 합니다.

4. Weaving (위빙):

  • Weaving은 Aspect를 코드의 핵심 로직에 통합하는 과정입니다. 이 과정에서 Aspect의 Advice가 조인 포인트에 삽입되어 실제 실행 시에 적용됩니다. Weaving은 컴파일 타임, 로드 타임, 또는 실행 타임에 이루어질 수 있습니다.
  1.  

 

예시

아래는 Python을 사용하여 AOP의 개념을 설명하는 간단한 예시입니다.

실제 AOP 프레임워크를 사용하는 것과는 다를 수 있지만, 개념을 이해하는 데 도움이 될 것입니다.

예시 코드: 로깅 기능을 AOP로 구현하기

import functools

def log_execution(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Executing {func.__name__} with arguments {args} and {kwargs}")
        result = func(*args, **kwargs)
        print(f"{func.__name__} returned {result}")
        return result
    return wrapper

class Calculator:
    @log_execution
    def add(self, a, b):
        return a + b

    @log_execution
    def subtract(self, a, b):
        return a - b

def main():
    calc = Calculator()
    print("Addition:", calc.add(5, 10))
    print("Subtraction:", calc.subtract(10, 5))

main()

 

  • log_execution 함수는 Aspect의 역할을 합니다. 이 함수는 메서드가 호출될 때마다 로깅을 수행합니다.
  • wrapper 함수는 실제 메서드 호출 전후에 로깅을 수행합니다.
  • Calculator 클래스의 add와 subtract 메서드에 @log_execution 데코레이터를 사용하여, 메서드 호출 전후에 로깅 기능이 적용되도록 합니다.

장점

  • 코드의 분리: 공통 기능을 한 곳에서 관리하므로 핵심 로직과 분리되어 코드가 깔끔해집니다.
  • 재사용성: 공통 기능을 재사용할 수 있어 중복 코드가 줄어듭니다.
  • 유지보수성: 공통 기능이 변경되면 Aspect만 수정하면 되므로 유지보수가 용이합니다.

단점

  • 복잡성: AOP는 개념이 복잡하여 이해하기 어려울 수 있습니다.
  • 디버깅: Aspect가 코드에 어떻게 적용되는지 추적하기 어려울 수 있습니다.

결론

이제 AOP, OOP, POP의 기본 개념과 차이점을 이해하셨나요?

각각의 프로그래밍 패러다임은 특정 상황에서 장단점이 있으며, 프로젝트의 요구사항에 따라 적절한 패러다임을 선택하는 것이 중요합니다. 이 세 가지 패러다임을 잘 이해하고 활용하면 더 나은 코드 품질과 유지보수성을 갖춘 소프트웨어를 개발할 수 있을 것입니다.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형