파이썬 튜토리얼에서는 @classmethod와 @staticmethod 데커레이터에 대해 설명하지 않는다는 것으로 자바 언어로 객체지향 개념을 배운 사람은 이 두 데커레이터가 파이썬에 있는 이유가 궁금할 것입니다.
@classmethod
이 데커레이터는 객체가 아닌 클래스에 연산을 수행하는 메서드를 정의하는 것으로 메서드가 호출되는 방식을 변경해서 클래스 자체를 첫 번째 인수로 받게 만들어서,, frombytes()같은 대안 생성자를 구현하기 위해서 주로 사용이 됩니다.
frombytes()같은 대안 생성자를 구현하기 위해 주로 사용된 것으로, frombytes() 메서드의 마지막 문장에서 cls는 객체를 생성하기 위해서 cls인수를 이용해서 실제로 클래스의 생성자를 호출한다.
관습적으로 cls를 클래스 메서드의 첫 번째 매개변수명으로 사용하지만, 파이썬은 특징 매개변수명을 요구하지 않는다.
@staticmethod
메서드가 특별한 첫 번째 인수를 받지 않도록 메서드를 변경하는데 본질적으로 정적 메서드는 모듈 대신 클래스 본체 안에 정의된 평범한 함수일 뿐이다.
@classmethod와 @staticmethod의 동작 비교
class Demo:
@classmethod
def kissmeth(*args):
return args
@staticmethod
def statmeth(*args):
return args
Demo.kissmeth()
Demo.kissmeh('spaa')
Demo.statmeth()
Demo.statemth('spam')
@classmethod 데커레이터는 쓰임새가 많은 게 확실하지만, @staticmethod 데커레이터는 사용해야하는 이유를 잘 모르겠다. 클래스와 함께 작동하지 않는 함수를 정의하려면, 단지 함수를 모듈에 정의하면되는데 이미 함수가 클래스를 건드리즈는 않지만, 클래스와 밀접한 연관되어 있어서 클래스 코드 가까운 곳에 두고 싶을 수는 있을 것이므로 클래스의 바로 앞이나 뒤에서 함수를 정의하면 된다.