[Python] 클래스: 정적멤버

기본적으로 클래스에 선언하는 메소드나, self.로 정의되는 변수들은 전부 객체(인스턴스) 단위에 종속되는 인스턴스 메소드/인스턴스 변수다.

그래서 객체를 생성하지 않고서는 image

image

image 해당 멤버들을 사용하는게 불가능하다.

하지만 코드를 짜다보면, 논리적으로 객체단위보단 클래스단위의 변수나 메서드가 필요할 때가 잦다.


정적멤버변수
그냥 클래스 내에 변수를 선언하면, 그건 클래스에서 단 하나만 선언되어 모두가 공유하는 변수가 된다.
이건 클래스 이름으로도, 객체로도 접근이 가능하다.
의미론적으론 클래스명으로 접근하는게 옳다. image

image


정적메서드
self 매개변수만 제거해도 객체와의 연관관계가 사라져, 객체 없이도 호출할 수 있게 된다. image

image 그대신 객체로는 접근이 불가하다.

객체로도 접근을 허용해주려면, staticmethod 데코레이터를 붙여주면 된다. image

image 보기도 더 좋다.