언어/파이썬

정적메소드와 클래스메소드

AlgoPoolJa 2021. 1. 9. 16:33

파이썬에서 해당 문제는 클래스안에서 다뤄진다. 

보통의 인스턴스 메소드객체의 인스턴스 필드를 self를 통해 접근할 수 있는 반면,

정적 메소드는 이러한 self 파라미터를 갖지 않고 인스턴스 변수에 엑세스 할 수 없다. 예를 들어 현재 정적메소드로 되어있는 is_square함수를 보면 어떠한 인스턴스 필드를 사용하지 않는것을 볼 수 있다.

보통 staticmethod는 객체 필드와 독립적이지만 로직상 클래스내에 포함됭야 하는 메소드에 사용된다. 이는 메소드 앞에 @staticmethod라는 Decorator를 표시하여 해당 메소드가 정적 메소드인것을 표시한다.

 

클래스 메소드는 메소드 앞에 @classmethod 라는 Decorator를 표시하여 해당 메소드가 클래스 메소드라는 것을 표시한다. 클래스 메소드는 정적메소드와 비슷한데 객체 인스턴스를 의미하는 self 대신 cls 라는 클래스를 의미하는 파라미터를 전달받는다. 클래스 메소드는 이렇게 전달받은 cls 파라미터를 통해 클래스 변수 등을 액세스 할 수 있다.

 

일반적으로 인스턴스 데이터를 액세스 할 필요가 없는 경우 클래스 메소드나 정적메소드를 사용하는데, 클래스 변수를 액세스 할 필요가 있으면 클래스 메소드를, 이를 액세스할 필요가 없을 경우에는 정적 메소드를 사용한다.