Python 데코레이터와 Java Annotation의 차이

토토들·2025년 10월 8일

CS

목록 보기
1/1

데코레이터(decorator)는 함수나 메서드에 적용되어, 해당 함수나 메서드의 기능을 확장하거나 변경하는 역할을 합니다.

데코레이터는 일반적으로 @기호와 함께 사용되며, 함수 또는 메서드 위에 위치합니다.
데코레이터는 기본적으로 함수를 인자로 받고, 또다른 함수를 반환하는 고차 함수(Higher-order function)입니다.

지금까지 클래스에서 메서드를 만들 때, @staticmethod, @classmethod, @abstractmethod 등을 붙였는데, 이렇게 @로 시작하는 것들데코레이터

장식자라고 부르기도 함.

데코레이터는 함수를 수정하지 않은 상태에서 추가 기능을 구현할 때 사용.

def hello(func): 
	def wrapper():
    	print(func.__name__, '함수 시작')
        func()
        print(func.__name__, '함수 끝')
    return wrapper
   
@hello
def hi():
	print("Hi")
  
  
hi()
# 실행 결과 
hi 함수 시작 
Hi
hi 함수 끝 

데코레이터를 여러 개 붙일 수도 있음.


def deco1(func):
	def wrapper():
    	print("deco1")
        func()
    return wrapper()
    
def deco2(func):
	def wrapper():
    	print("deco2")
        func()
    return wrapper()
    

@deco1
@deco2
def sample():
	print('sample')
# 실행 결과
deco1
deco2
sample

순차적으로 실행된다.

그렇다면 Spring의 annotation과는 무슨 차이일까?

둘 다 똑같이 @를 쓴다는 점에서 기능적으로 비슷해 보일 수 있다.
하지만 둘은 명확히 차이가 크다.

@ 어노테이션의 용도는
1. 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공한다.
2. 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
3. 런타임 시 특정 기능을 실행하도록 정보를 제공한다.

둘의 비슷한 점은

  • 둘 다 @ 문법을 씀
  • 둘 다 코드 간결성과 관심사 분리에 도움이 됨
  • 둘 다 프로그래머가 핵심 로직에 집중할 수 있게 도와줌.

결론

  • Spring 어노테이션은 메타데이터로서 프레임워크에게 "이 코드의 의미"를 알려줌
  • Python 데코레이터는 실행 중에 직접 함수나 클래스를 감싸서 동작을 추가함.
profile
패션과 개발을 좋아합니다.

0개의 댓글