Python객체지향

classmethod와 staticmethod

인스턴스가 아닌 클래스 수준에서 동작하는 메서드를 정의할 때 쓰는 `classmethod`와 `staticmethod` 차이를 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

python
class User:
    count = 0

    @classmethod
    def total(cls):
        return cls.count

    @staticmethod
    def is_valid_name(name):
        return len(name) >= 2

설명

  • classmethod는 첫 인자로 클래스 자체를 받으며, 클래스 상태를 다루는 데 적합합니다.
  • staticmethod는 클래스나 인스턴스를 자동으로 받지 않으므로, 논리적으로 클래스 안에 둘 만한 보조 함수를 묶을 때 씁니다.
  • 인스턴스 메서드, 클래스 메서드, 정적 메서드는 각각 다루는 대상이 다릅니다.
  • 객체지향 설계에서는 "이 동작이 인스턴스 상태를 쓰는가, 클래스 상태를 쓰는가, 둘 다 아닌가"로 구분하면 쉽습니다.

짧은 예제

python
class Temperature:
    @staticmethod
    def c_to_f(c):
        return c * 9 / 5 + 32

빠른 정리

종류첫 인자잘 맞는 역할
인스턴스 메서드self객체 상태 사용
클래스 메서드cls클래스 상태 사용
정적 메서드없음보조 기능 묶기

공식 참고: Classes, Built-in Functions

주의할 점

staticmethod가 많아지면 "정말 클래스 안에 있어야 하나?"를 한 번 생각해 보는 편이 좋습니다. 독립 함수로 두는 쪽이 더 단순한 경우도 많습니다.