프로그래밍 언어/파이썬

classmethod와 staticmethod의 차이

hyeseong-dev 2024. 3. 21. 03:23

파이썬에서 classmethodstaticmethod는 클래스를 사용하여 메소드를 정의할 때 사용되는 두 가지 유형의 메소드입니다. 이 두 메소드는 사용 목적과 호출 방식에서 차이가 있습니다.

classmethod

  • classmethod는 클래스를 위한 메소드입니다. 첫 번째 매개변수로 클래스 자체(cls)를 자동으로 받습니다.
  • 이 메소드는 클래스 변수와 같은 클래스 레벨의 데이터에 접근하고 수정하는 데 사용됩니다.
  • classmethod는 인스턴스를 생성하지 않고도 클래스 이름을 통해 직접 호출할 수 있습니다.
  • 클래스 메소드는 상속 시, 상속받은 클래스의 객체와 함께 해당 클래스를 가리키는 cls 매개변수를 사용하기 때문에 서브클래스에서도 적절하게 동작합니다.

staticmethod

  • staticmethod는 클래스나 인스턴스와 독립적이지만, 로직상 클래스 내에 포함되는 메소드입니다.
  • 이 메소드는 특정 인스턴스나 클래스 변수에 접근하지 않습니다. 따라서 selfcls를 매개변수로 받지 않습니다.
  • staticmethod 역시 인스턴스를 생성하지 않고 클래스 이름을 통해 직접 호출할 수 있습니다.
  • 주로 클래스 내에 논리적으로 포함되지만, 클래스나 인스턴스 데이터에 접근할 필요가 없는 경우 사용됩니다.

차이점

  • 매개변수: classmethod는 첫 번째 매개변수로 클래스(cls)를 받습니다. 반면, staticmethodselfcls 같은 특별한 첫 번째 매개변수를 받지 않습니다.
  • 용도: classmethod는 클래스 변수 같은 클래스 레벨의 데이터에 접근하거나 수정할 때 사용됩니다. staticmethod는 클래스나 인스턴스와 독립적인 메소드가 필요할 때 사용되며, 클래스 내에서 정의된 단순 함수와 유사합니다.
  • 상속과의 관계: classmethod는 상속 시 서브클래스에 대해 cls 매개변수가 서브클래스를 가리키므로, 상속 체인에서 유연하게 사용될 수 있습니다. staticmethod는 상속과 관계없이 클래스 내의 정적 함수로 동작합니다.

예시

class ExampleClass:
    class_var = "I am a class variable"

    @classmethod
    def class_method(cls):
        print(cls.class_var)

    @staticmethod
    def static_method():
        print("I am static and independent of class or instance")

ExampleClass.class_method()  # 클래스 변수에 접근
ExampleClass.static_method()  # 클래스나 인스턴스와 독립적인 동작 수행

이 예시에서 class_method는 클래스 변수에 접근할 수 있지만, static_method는 그렇지 않습니다. staticmethod는 클래스 내에서 정의되어 있지만, 클래스의 어떤 속성에도 접근하지 않는 독립적인 메소드입니다.