파이썬/Basic

Python 데코레이터 : 정적 메서드부터 데이터 클래스까지 알아보기

코샵 2024. 9. 16. 10:02
반응형

@staticmethod: 클래스 내부의 독립적인 함수

Python에서 @staticmethod는 클래스 내부에 정의된 독립적인 함수를 나타냅니다. 이 함수는 클래스나 인스턴스와 상관없이 동작하며, self 또는 cls 매개변수를 받지 않습니다.

class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b

result = MathUtils.add(10, 5)  # 15

@classmethod: 클래스 자체를 인자로 받는 메서드

@classmethod는 클래스 자체를 첫 번째 인자로 받는 메서드를 나타냅니다. 이 메서드는 클래스 인스턴스 없이 호출할 수 있으며, 클래스 속성이나 메서드에 접근할 수 있습니다.

class MyClass:
    class_attr = 0

    @classmethod
    def increment_class_attr(cls):
        cls.class_attr += 1

MyClass.increment_class_attr()  # class_attr 값이 1이 됨

@property, @setter, @deleter: 속성 접근자

@property, @setter, @deleter는 클래스 속성에 대한 접근자 메서드를 정의할 때 사용합니다. 이를 통해 속성에 대한 추가 로직을 구현할 수 있습니다.

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value

@abstractmethod: 추상 메서드

@abstractmethod는 추상 기본 클래스에서 추상 메서드를 정의할 때 사용합니다. 이 메서드는 구현되지 않고 하위 클래스에서 반드시 구현해야 합니다.

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "Woof!"

@dataclass: 데이터 클래스 생성

@dataclass는 클래스 정의를 간단하게 만들어주는 데코레이터입니다. 이 데코레이터를 사용하면 생성자, 문자열 표현, 비교 연산 등의 표준 메서드를 자동으로 생성해줍니다.

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int

person = Person("Alice", 30)
print(person)  # Person(name='Alice', age=30)

이처럼 Python의 데코레이터는 다양한 용도로 활용될 수 있습니다. 함수와 클래스의 동작을 쉽게 수정하고 확장할 수 있는 강력한 기능을 제공합니다. 데코레이터를 적극적으로 활용하면 코드의 재사용성, 가독성, 유지보수성을 크게 향상시킬 수 있습니다.