728x90

static variable이나 static method, 모두 static이란 의미는 

"객체마다 달라지지 않는"

"객체 생성을 하지 않아도"

라는 컨셉이다.

 

 

 

Static variable = Class variable

파이썬에서는 static variable을 아주 간단하게 구현이 가능

 

class Sample(object):

  sv = 'I'm static variable'

 

이와 같이 class variable이 static variable 역할을 한다.

즉 객체가 몇개를 생성하든, 같은 memory를 참조하는 variable이 static=class variable이다.

(즉 객체마다 달라지지 않고 고정된(static) variable)

 

 

 

클래스에서 직접 접근할 수 있는 method로는 파이썬에서 2가지가 존재한다. classmethod와 staticmethod

둘의 차이는

classmethod는 method 직전 라인에 @classmethod를 작성

staticmethod는 method 직전 라인에 @staticmethod를 작성

classmethod는 method에 첫 인자로 cls를 입력 e.g. def add(cls, x, y)

staticmethod는 method에 첫 인자가 cls나 self가 필요 없음 e.g. def add(x,y)

classmethod는 class variable로의 접근, 수정이 가능

staticmethod는 class variable로의 접근과 수정이 모두 불가능

classmethod는 factory methods(디자인 패턴)을 만들 때 사용

staticmethod는 utility functions을 만들 때 사용(사실 class 내에 정의하지 않고 사용해도 되지만, 해당 class에 있는게 문맥상 떨어져서 넣는게 대다수)

 

factory methods란, 조건에 따라 다른 객체를 생성하는 일을 factory라는 것에 위임하는 형태

2가지 효용을 갖는다.

-객체를 생성하는 곳이 너무 많은 상황에, 클래스의 생성자 수정이 발생했을 때, 각 객체생성부분을 다 찾아 수정하기가 번거로울 때, factory methods를 사용하면 factory methods부분만 수정하면 된다.

-조건에 따라 다른 객체를 생성하는 부분을 factory에 위임함으로써, 객체를 생성하여 사용하는 개발자로 하여금 개별 클래스에 대한 상세사항을 알 필요가 없도록 함

즉, 클래스가 아주 다양하고 조건에 따라 다른 클래스를 사용해야할 때 factory methods를 만들어 사용하며

python의 경우 그 때 classmethod가 그 일을 해줄 수가 있다.

 

 

 

 

참고자료:

 

 

 

class method vs static method in Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

728x90

+ Recent posts