파이썬/클래스와 객체 지향

파이썬 정적 메소드(Static Method) 이해하기

Data Jun 2025. 8. 31. 18:22

파이썬에서 메서드를 정의할 때는 보통 인스턴스 속성에 접근하기 위해 self를 사용하거나,

클래스 자체에 접근하기 위해 cls를 사용합니다.

하지만 어떤 기능은 인스턴스나 클래스와 무관하게,

단순히 클래스와 논리적으로 관련된 유틸리티 함수일 때가 있습니다.

이럴 때 활용하는 것이 바로 **정적 메소드(static method)**입니다.

 

1. 정적 메소드란?

  • @staticmethod 데코레이터를 사용해 정의합니다.
  • self(인스턴스 참조)나 cls(클래스 참조)를 인자로 받지 않습니다.
  • 클래스나 인스턴스의 상태와 관계없이 독립적으로 동작합니다.
  • 단순히 클래스와 논리적으로 연관성이 있는 기능을 클래스 내부에 묶어 두는 용도로 쓰입니다.

예시

class Calculator:
    @staticmethod
    def add(a, b):
        return a + b
    
    @staticmethod
    def multiply(a, b):
        return a * b

print(Calculator.add(3, 5))       # 8
print(Calculator.multiply(2, 4))  # 8

위 코드에서 add와 multiply는 클래스나 인스턴스의 속성과는 무관한 단순 연산 기능입니다.

하지만 계산기라는 개념과 연관이 있으므로 Calculator 클래스 내부에 넣어 정리하는 것이 가독성에 유리합니다.

 

2. 정적 메소드에서 클래스 접근하기

정적 메소드 안에서는 self나 cls를 사용할 수 없지만, 클래스 이름을 직접 적어 접근할 수 있습니다.

class Calculator:
    PI = 3.14   # 클래스 변수

    @staticmethod
    def circle_area(radius):
        return Calculator.PI * (radius ** 2)  # 클래스 이름 직접 사용

print(Calculator.circle_area(10))  # 314.0

이처럼 정적 메소드 내부에서 클래스 변수 PI를 사용할 때는 Calculator.PI처럼 클래스 이름을 직접 명시하면 됩니다.

단, 이렇게 하면 코드가 특정 클래스 이름에 묶여버리기 때문에 상속 관계에서는 다소 유연성이 떨어질 수 있습니다.

이럴 때는 cls를 활용할 수 있는 **클래스 메소드(@classmethod)**가 더 적합합니다.

 

 

정리하면

  • 정적 메소드는 클래스와 연관성이 있지만 상태와 무관한 일반 함수를 클래스 내부에 정의하는 방식입니다.
  • self나 cls는 사용할 수 없지만, 클래스 이름을 직접 명시해 클래스 변수나 메서드에 접근할 수 있습니다.
  • 다만 상속 상황에서는 @classmethod가 더 유연합니다.