@staticmethod
정의
@staticmethod는 클래스의 정적 메서드를 정의하는 데 사용되는 데코레이터입니다. 정적 메서드는 클래스와 연관되어 있지만, 인스턴스나 클래스 상태와 독립적으로 동작합니다.
특징
- 인스턴스와 독립적
- 정적 메서드는 self(인스턴스)나 cls(클래스)에 대한 참조 없이 호출할 수 있습니다.
- 클래스나 인스턴스를 생성하지 않아도 호출 가능
- 클래스명.메서드명() 형태로 직접 호출할 수 있습니다.
- 상태와 무관한 기능 구현에 적합
- 클래스의 상태와 독립적이며, 유틸리티 메서드나 클래스와 관련된 일반적인 기능을 구현할 때 유용합니다.
사용법
예제: 간단한 유틸리티 함수
class MathOperations:
@staticmethod
def add(a, b):
return a + b
# 인스턴스 생성 없이 호출 가능
result = MathOperations.add(3, 5)
print(result) # 출력: 8
설명:
add 메서드는 두 숫자를 더하는 기능을 제공합니다. 클래스의 상태와 관계가 없으므로 정적 메서드로 정의하는 것이 적합합니다.
언제 @staticmethod를 사용해야 하는가?
- 클래스 상태 또는 인스턴스 상태와 무관한 기능이 필요한 경우
- 정적 메서드는 클래스의 상태(클래스 변수) 또는 **인스턴스의 상태(인스턴스 변수)**를 읽거나 수정하지 않습니다.
- 예: 간단한 계산, 변환 작업 등
- 유틸리티 메서드 작성 시
- 특정 클래스와 관련이 있지만 상태를 필요로 하지 않는 함수를 클래스 내부에서 관리하고 싶을 때.
비교: @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 |