티스토리 뷰

이 포스팅에서는 파이썬에 클래스 메소드와 스태틱 메소드의 성격을 알아보고, 

두가지 메소드의 차이점을 한번 비교해본다.

---

클래스 메소드 (= @classmethod 데코레이터 함수)

- class 자체에 바인딩 된 메소드 (인스턴스에서 호출 불가)

- class 자체를 암묵적인 첫번째 파라미터로 넘겨받는다.

- 그로인해 함수 안에서 클래스 자체에서 들고있는 모든 정보에 접근이 가능하다.

- 반대로 클래스 인스턴스 정보는 접근이 불가능하다

- 메소드 내에서 class state 를 변경할 수 있으며 이는 현재 메모리에 올라가 있는 해당 클래스의 모든 인스턴스에 영향을 줄 수 있다. 

  그래서 이 부분은 클래스 메소드 생성 시, 매우 주의해야 함.

- 일반적으로 클래스의 factory method (cls object 를 리턴) 로 많이 사용한다. (constructor 비슷)

 

스태틱 메소드 (= @staticmethod 데코레이터 함수)

- class 자체에 바인딩 된 메소드

- 암묵적 첫번째 파라미터가 없다. 전부 명시적 파라미터만 입력 받아 처리 함.

- 클래스 자체 정보 접근이 불가능함.

- 스펙을 보면 사실 일반 함수와 별다를게 없는거나 마찬가지지만, 특정 클래스와 관련이 있다고 생각되기에 그냥 클래스에다가 붙여놓은 유틸성 함수라고 생각하면 된다.

- 일반적으로 클래스와 관련된 유틸리티 함수들을 만들때 사용한다.

 

클래스 메소드 VS 스태틱 메소드

- class 메소드는 항상 첫번째 암묵적 파라미터로 cls 를 넘겨받지만 static 메소드는 그런게 없다

- class 메소드는 클래스 정보에 접근 & 수정이 가능하지만 static method 는 그렇지 못하다.

 

잘 사용된 예 - Best Practice

<참고 링크>

https://www.geeksforgeeks.org/class-method-vs-static-method-python/

https://realpython.com/instance-class-and-static-methods-demystified/

댓글