classmethod와 staticmethod의 차이

2024. 3. 21. 03:23·프로그래밍 언어/파이썬

파이썬에서 classmethod와 staticmethod는 클래스를 사용하여 메소드를 정의할 때 사용되는 두 가지 유형의 메소드입니다. 이 두 메소드는 사용 목적과 호출 방식에서 차이가 있습니다.

classmethod

  • classmethod는 클래스를 위한 메소드입니다. 첫 번째 매개변수로 클래스 자체(cls)를 자동으로 받습니다.
  • 이 메소드는 클래스 변수와 같은 클래스 레벨의 데이터에 접근하고 수정하는 데 사용됩니다.
  • classmethod는 인스턴스를 생성하지 않고도 클래스 이름을 통해 직접 호출할 수 있습니다.
  • 클래스 메소드는 상속 시, 상속받은 클래스의 객체와 함께 해당 클래스를 가리키는 cls 매개변수를 사용하기 때문에 서브클래스에서도 적절하게 동작합니다.

staticmethod

  • staticmethod는 클래스나 인스턴스와 독립적이지만, 로직상 클래스 내에 포함되는 메소드입니다.
  • 이 메소드는 특정 인스턴스나 클래스 변수에 접근하지 않습니다. 따라서 self나 cls를 매개변수로 받지 않습니다.
  • staticmethod 역시 인스턴스를 생성하지 않고 클래스 이름을 통해 직접 호출할 수 있습니다.
  • 주로 클래스 내에 논리적으로 포함되지만, 클래스나 인스턴스 데이터에 접근할 필요가 없는 경우 사용됩니다.

차이점

  • 매개변수: classmethod는 첫 번째 매개변수로 클래스(cls)를 받습니다. 반면, staticmethod는 self나 cls 같은 특별한 첫 번째 매개변수를 받지 않습니다.
  • 용도: classmethod는 클래스 변수 같은 클래스 레벨의 데이터에 접근하거나 수정할 때 사용됩니다. staticmethod는 클래스나 인스턴스와 독립적인 메소드가 필요할 때 사용되며, 클래스 내에서 정의된 단순 함수와 유사합니다.
  • 상속과의 관계: classmethod는 상속 시 서브클래스에 대해 cls 매개변수가 서브클래스를 가리키므로, 상속 체인에서 유연하게 사용될 수 있습니다. staticmethod는 상속과 관계없이 클래스 내의 정적 함수로 동작합니다.

예시

class ExampleClass:
    class_var = "I am a class variable"

    @classmethod
    def class_method(cls):
        print(cls.class_var)

    @staticmethod
    def static_method():
        print("I am static and independent of class or instance")

ExampleClass.class_method()  # 클래스 변수에 접근
ExampleClass.static_method()  # 클래스나 인스턴스와 독립적인 동작 수행

이 예시에서 class_method는 클래스 변수에 접근할 수 있지만, static_method는 그렇지 않습니다. staticmethod는 클래스 내에서 정의되어 있지만, 클래스의 어떤 속성에도 접근하지 않는 독립적인 메소드입니다.

저작자표시 (새창열림)

'프로그래밍 언어 > 파이썬' 카테고리의 다른 글

Celery와 FastAPI - 2  (1) 2024.03.22
Celery와 FastAPI - 1  (0) 2024.03.22
파이썬에서 접근제어 지시자  (0) 2024.03.20
Call by Assignment란?  (0) 2024.03.20
r string, u string이란  (0) 2024.03.20
'프로그래밍 언어/파이썬' 카테고리의 다른 글
  • Celery와 FastAPI - 2
  • Celery와 FastAPI - 1
  • 파이썬에서 접근제어 지시자
  • Call by Assignment란?
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    Spring Boot
    OOP
    Docker-compose
    취업리부트
    Spring WebFlux
    프로그래머스
    그리디
    reactor
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    DP
    완전탐색
    AWS
    ecs
    항해99
    celery
    자바
    시험
    SAA
    WebFlux
    docker
    EC2
    spring
    FastAPI
    mybatis
    백준
    Redis
    파이썬
    RDS
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
classmethod와 staticmethod의 차이
상단으로

티스토리툴바