승상의 코딩 블로그

파이썬 - staticmethod 본문

Python (파이썬)

파이썬 - staticmethod

양승상 2023. 5. 29. 11:21
class Operation:
    @staticmethod
    def add(a, b):
    	return a+b
        
Operation.add(1, 2) # 3

함수위에 @staticmethod 가 붙은 코드를 종종 볼 수 있습니다.

staticmethod 로 설정된 함수는 인스턴스로 만들어서 사용할 수 있고, 인스턴스 생성없이도 사용할 수 있습니다.

대신, 클래스 내의 속성에는 접근할 수 없습니다.

 

staticmethod 는 언제 사용하면 좋을까요?

def add(a, b):
	return a + b
        
add(1,2) # 3

"Q.staticmethod 함수는 클래스 내부의 데이터에 클래스 함수처럼 접근할 수 없는데, 그냥 add 함수를 만들어 써도 되지 않을까요?"

이러한 함수가 하나뿐이라면 단순히 add 를 써도 좋습니다. 항상 문제는 코드가 커지고 복잡해지면서 생기게 됩니다.

add, mul, divide, ...  함수들이 늘어난다고 해봅시다. add, mul, divide 같은 이름은 기능이 단순하고 명확합니다.

그러나 실제로는 이렇게 명확하게 함수를 설명하는 것은 무지하게 어렵습니다.

class 내의 staticmethod 를 통해, 이 함수들을 그룹핑할 수 있습니다. 

 

"Q. 그러면 파일로 그룹핑하며 되지 않을까요?"

class Operation:
    def __init__(self):
    	self.sum = 0

    def add(self, a):
        self.sum += a
    	return self.sum

    @staticmethod
    def add(a, b):
    	return a + b

operation = Operation()
operation.add(1) # sum : 1
Operation.add(1, 2) # 3

단순히 '두 개의 값을 더해서 단순 결과를 반환하는 함수'가 아니라, '기존 값에다가 값을 더하는 함수'를 추가로 구현한다면?

'기존 값에다가 값을 더하는 함수'는 내부적으로 데이터를 관리해야하니까, 클래스로 만들어 질 것입니다. 

두 개의 값을 더해서 단순 결과를 반환하는 함수를 포함할 수 있는 클래스가 있다면, 하나의 바운더리(Class)로 묶어두는 것이 효율적일 것입니다. (이렇게 추가된 함수는 staticmethod 가 붙어있으므로, 내부데이터를 사용하지 않음 알 수 있습니다.)

반응형
Comments