<Python> 정적 메서드(staticmethod)와 클래스 메서드(classmethod)

반응형

파이썬 정적 메서드 소개

파이썬에서 정적 메서드(staticmethod)는 클래스에서 해당 클래스의 인스턴스를 참조하지 않고 독립적으로 작동하는 메서드를 정의할 때 사용합니다. 정적 메서드는 클래스 네임스페이스에 속하기 때문에, 인스턴스를 사용하지 않고 클래스를 통해 호출해야 합니다. 정적 메서드에서는 self 인자를 사용하지 않습니다.

정적 메서드 정의하기

정적 메서드를 정의하려면, @staticmethod 데코레이터를 사용하여 메서드를 정의해야 합니다.

class MyClass:
    @staticmethod
    def my_static_method():
        print("This is a static method.")

이제 클래스의 인스턴스를 생성하지 않고도 정적 메서드를 호출할 수 있습니다.

MyClass.my_static_method()  # 출력: This is a static method.

파이썬 클래스 메서드 소개

파이썬에서 클래스 메서드(classmethod)는 클래스에 속하며, 인스턴스와 관련된 로직보다는 클래스 자체와 관련된 로직이 필요한 경우 사용합니다. 클래스 메서드에서는 첫 번째 인자로 클래스 자체를 참조하는 cls 인자를 사용합니다.

클래스 메서드 정의하기

클래스 메서드를 정의하려면, @classmethod 데코레이터를 사용하여 메서드를 정의합니다.

class MyClass:
    @classmethod
    def my_class_method(cls):
        print("This is a class method.")

클래스 메서드는 인스턴스를 생성하지 않고도 호출할 수 있습니다.

MyClass.my_class_method()  # 출력: This is a class method.

정적 메서드와 클래스 메서드의 활용 및 차이점

정적 메서와 클래스 메서드는 비슷한 듯 다른 용도로 사용되며, 다른 목적으로 사용됩니다.

정적 메서드는 클래스와 연관성이 낮은 작업에 사용되며, 주로 외부에서 클래스를 통해 호출할 때 해당 메서드가 수행하려는 작업을 영향을 미치지 않는 이상 독립적으로 작동합니다.

클래스 메서드는 클래스로부터 생성된 인스턴스와 관련된 로직보다는 클래스 자체를 사용하여 메서드를 수행하는 용도로 사용됩니다. 클래스 자체를 인자로 사용하며, 다른 클래스를 상속받았을 때 이를 유연하게 처리할 수 있습니다.

class MyClass:
    class_var = "This is a class variable."

    @staticmethod
    def static_method():
        return "This is a static method."

    @classmethod
    def class_method(cls):
        return f"This is a class method. Class variable: {cls.class_var}"


class MyChildClass(MyClass):
    class_var = "This is a child class variable."


MyClass.class_method()
# 출력: This is a class method. Class variable: This is a class variable.

MyChildClass.class_method()
# 출력: This is a class method. Class variable: This is a child class variable.

위 예제에서 MyClass를 상속받은 MyChildClass의 클래스 메서드를 호출했을 때, 각자의 클래스 변수에 접근한 결과가 출력됩니다. 하지만 정적 메서드는 이렇게 처리할 수 없습니다.

 

이 글에서는 파이썬 정적 메서드와 클래스 메서드에 대해 알아보았습니다. 정적 메서드와 클래스 메서드는 클래스 내에서 독립적으로 작동하는 기능을 구현하거나, 클래스 자체를 사용하여 작업을 수행하는 용도로 적합한 방법입니다.

 

객체 지향 프로그래밍을 생각하며 클래스의 구조와 목적에 따라 정적 메서드와 클래스 메서드를 적절하게 사용할 수 있도록 해야된다고 합니다.. 이게 어렵지만..

 

오늘은 여기까지. 감사합니다.

Designed by JB FACTORY