Python 데코레이터 (Decorators) 이해하기

이번 포스팅에서는 Python 데코레이터 이해를 위해 간단한 예제 코드를 기반으로 Python 데코레이터에 대해서 설명하겠습니다. Python에서 데코레이터(Decorators)는 다른 함수나 메서드의 동작을 수정하거나 확장하는 데 사용되는 특수한 유형의 함수입니다. 데코레이터는 소스 코드를 직접 수정하지 않고도 기능을 추가하기 위해 함수나 메서드에 적용되거나 사용되는 경우가 많습니다.

Python 데코레이터 이해하기

데코레이터에 대한 간략한 정의는 다음과 같습니다. 데코레이터 함수는 다른 함수를 인수로 취하고 새 함수를 반환하는 고차 함수입니다. 이 새로운 함수는 일반적으로 원래 함수의 동작을 확장하거나 수정합니다.

데코레이터 함수에는 일반적으로 특수 문자 “@”가 접두어로 붙고 항상 데코레이션되는 함수 위에 배치됩니다.

다음 코드 섹션에서는 데코레이터의 몇 가지 예제 코드와 이를 사용하여 원래 소스 코드를 변경하는 기능을 확장하는 방법을 보여줍니다.


예제 1

# 함수 정의

def test():
  print("두 개의 홀수 3 과 7 의 합은")
  print(3 + 7)
  print("항상 짝수입니다.")

test()
----------------------------------------
두 개의 홀수 3 과 7 의 합은
10
항상 짝수입니다.
# 데코레이터 사용없이 함수 사용
def odd_add():
  print(3+7)

odd_add()
-------------
10
# 일반 홀수 덧셈 함수의 기능을 확장하기 위해 데코레이터 사용하기

@sum_decorator
def odd_add():
  print(3+7)

odd_add()
--------------------------------------
두 개의 홀수 3 과 7 의 합은
10
항상 짝수입니다.


예제 2

# 새로운 데코레이터 정의
def deco(func):
  def inner_deco():
    print("1 ~ 10 사이의 정수 중 홀수를 더하면")
    func()
  return inner_deco

# 기능을 확장하는 함수에 데코레이터 사용
@deco
def odd_add():
  sum = 0
  for i in range(10):
    if i%2 != 0:
      sum += i
  print(sum)

#데코레이터된 함수 호출
odd_add()
--------------------------------------------------------
1 ~ 10 사이의 정수 중 홀수를 더하면
25


OOP에 데코레이터가 필요한 이유와 장점


코드 재사용성

데코레이터는 코더가 공통 기능이나 동작을 여러 함수나 메서드에 적용할 수 있도록 하여 코드의 재 사용성을 향상 시킵니다. 이 방법은 유사한 동작을 가진 여러 클래스가 있는 경우 OOP에서 코드를 작성하는 데 유용합니다.


우려사항의 분리

데코레이터는 코더가 코드의 다양한 관심사나 측면을 분리하는 데 도움이 됩니다. 예를 들어 로그인, 인증 등을 위한 데코레이터를 가질 수 있습니다.

서로 다른 작업마다 서로 다른 데코레이터를 사용하는 방식을 분리하면 특히 공동 작업 환경에서 작업할 때 코드 베이스가 더욱 깔끔하고 유지 관리 가능해집니다.


개방형 또는 폐쇄형 원칙

데코레이터는 클래스나 함수가 확장을 위해 열려 있어야 하고 수정을 위해 닫혀 있어야 한다는 객체 지향 프로그래밍의 “열기/닫기 원칙”을 따릅니다. 이러한 상황에서는 데코레이터를 사용하여 소스 코드를 변경하지 않고도 함수나 메서드의 동작을 확장할 수 있습니다.


쉬운 유지보수

데코레이터를 통해 코드베이스 전체를 변경하는 대신 항상 한 곳에서 함수나 메서드의 동작을 업데이트할 수 있으므로 데코레이터를 사용하면 코드를 더 쉽게 관리하고 유지할 수 있습니다.


단일 책임 원칙 장려

데코레이터는 함수나 메서드에 추가 기능을 모듈화할 수 있도록 하여 각 함수나 메서드가 단일 책임을 갖도록 보장할 수 있습니다.


가독성

데코레이터는 함수나 메서드의 핵심 기능을 보조 기능과 분리하여 유지함으로써 코드 가독성을 향상시킬 수 있습니다.


결론

전체적으로 Python의 데코레이터는 함수와 메서드의 동작을 확장하고 수정하기 위한 강력한 도구입니다. 이는 클래스와 객체를 다루는 객체 지향 프로그래밍에 특히 유용합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다