백엔드 개발 · 중급
Python의 @classmethod와 @staticmethod의 차이점은?
힌트 · cls 파라미터 유무와 상속 관계에서의 동작을 비교해보세요.
클래스 객체인스턴스 객체selfcls상태 변경
모범답안
@classmethod와 @staticmethod는 클래스 내에서 정의되는 메서드인데, 호출 방식과 역할에 차이가 있습니다.
@classmethod는 클래스 객체를 첫 번째 인자로 받는 메서드입니다. 관례적으로 cls라는 이름으로 받죠. 이를 통해 클래스 속성에 접근하거나, 팩토리 메서드처럼 클래스의 새로운 인스턴스를 생성하는 데 활용될 수 있습니다. 상속 관계에서 특히 유용하게 사용되는데, 자식 클래스에서 호출하면 자식 클래스 객체를 cls로 받기 때문에, 부모 클래스의 코드를 수정하지 않고도 자식 클래스에 맞게 동작을 변경할 수 있습니다.
반면 @staticmethod는 클래스 객체나 인스턴스 객체를 암묵적으로 전달받지 않는 메서드입니다. 일반 함수와 거의 동일하게 동작하며, 클래스 내에 포함되어 있다는 점만 다릅니다. 클래스와 관련된 유틸리티 함수를 정의하거나, 클래스의 상태를 변경하지 않고 특정 작업을 수행하는 데 적합합니다. 클래스 이름으로 직접 호출하거나 인스턴스를 통해 호출할 수 있지만, 클래스나 인스턴스의 상태에는 영향을 주지 않습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.