본문 바로가기
Python/study

@staticmethod

by 르면가게 2024. 12. 8.

@staticmethod

정의

@staticmethod는 클래스의 정적 메서드를 정의하는 데 사용되는 데코레이터입니다. 정적 메서드는 클래스와 연관되어 있지만, 인스턴스나 클래스 상태와 독립적으로 동작합니다.


특징

  1. 인스턴스와 독립적
    • 정적 메서드는 self(인스턴스)나 cls(클래스)에 대한 참조 없이 호출할 수 있습니다.
  2. 클래스나 인스턴스를 생성하지 않아도 호출 가능
    • 클래스명.메서드명() 형태로 직접 호출할 수 있습니다.
  3. 상태와 무관한 기능 구현에 적합
    • 클래스의 상태와 독립적이며, 유틸리티 메서드나 클래스와 관련된 일반적인 기능을 구현할 때 유용합니다.

사용법

예제: 간단한 유틸리티 함수

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

# 인스턴스 생성 없이 호출 가능
result = MathOperations.add(3, 5)
print(result)  # 출력: 8

설명:

add 메서드는 두 숫자를 더하는 기능을 제공합니다. 클래스의 상태와 관계가 없으므로 정적 메서드로 정의하는 것이 적합합니다.


언제 @staticmethod를 사용해야 하는가?

  1. 클래스 상태 또는 인스턴스 상태와 무관한 기능이 필요한 경우
    • 정적 메서드는 클래스의 상태(클래스 변수) 또는 **인스턴스의 상태(인스턴스 변수)**를 읽거나 수정하지 않습니다.
    • 예: 간단한 계산, 변환 작업 등
  2. 유틸리티 메서드 작성 시
    • 특정 클래스와 관련이 있지만 상태를 필요로 하지 않는 함수를 클래스 내부에서 관리하고 싶을 때.

비교: @staticmethod vs @classmethod

특징  @staticmethod @classmethod
참조 객체 없음 cls (클래스 참조 전달됨)
상태 접근 클래스/인스턴스 상태 접근 불가 클래스 상태에 접근 가능
사용 목적 상태와 독립적인 기능 구현 클래스 상태를 수정하거나 확인
호출 방식 클래스명.메서드명() 클래스명.메서드명()

예제: @staticmethod와 @classmethod 차이

class Example:
    class_variable = "I am a class variable"

    @staticmethod
    def static_method():
        return "Static method called"

    @classmethod
    def class_method(cls):
        return f"Class method called. Access: {cls.class_variable}"

# 호출
print(Example.static_method())  # Static method called
print(Example.class_method())   # Class method called. Access: I am a class variable

요약

  • @staticmethod:
    • 클래스와 관련은 있지만 상태를 필요로 하지 않는 기능 구현.
    • 유틸리티 메서드로 적합.
  • 사용 상황:
    • 클래스 상태와 무관한 간단한 연산, 데이터 처리, 변환 메서드 등.

'Python > study' 카테고리의 다른 글

@wrap  (0) 2025.01.15
unittest 모듈  (0) 2024.12.08
ast.literal_eval()  (0) 2024.12.08
__str__와 __repr__  (0) 2024.12.08
subprocess.run()  (0) 2024.12.08