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가 그 일을 해줄 수가 있다.
참고자료:
'CS' 카테고리의 다른 글
[OS]인터럽트, 트랩 (0) | 2020.11.24 |
---|---|
(미완)UML, Unified Modeling Language란 (0) | 2020.11.22 |
Programming paradigm, Declarative(선언형)과 Imperative(명령형)에 대해서 (0) | 2020.11.22 |
[Algorithm]Find all sampling from nested dictionary of list (0) | 2020.11.15 |
[Algorithm]the shortest repetitive pattern in a string (0) | 2020.11.14 |