Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 classmethod() 완벽 정리: 개념부터 활용 예제까지

파이썬에서 클래스 메서드(class method)는 첫 번째 인자로 클래스 자신을 받는 메서드입니다. 덕분에 클래스로부터 인스턴스(객체)를 먼저 생성하지 않고도 클래스 내부의 메서드를 바로 호출할 수 있습니다. 사용 방법은 간단합니다. 클래스 안에 선언된 메서드 위에 @classmethod 데코레이터만 붙여주면, 이후 곧바로 해당 메서드에 접근할 수 있습니다.

classmethod의 주요 특징

  • 클래스에 바인딩됨: classmethod는 클래스 자체에 묶여 있기 때문에, 인스턴스를 생성하지 않아도 언제든 사용할 수 있습니다.

  • 클래스 상태 변경 가능: classmethod는 클래스 자체를 수정할 수 있으며, 이러한 변경 사항은 해당 클래스의 모든 인스턴스에 자동으로 반영(전파)됩니다.

classmethod 사용 방법

다음 예제에서는 WeekDay라는 클래스를 만들고, 그 안에 daynames라는 메서드를 정의합니다. 그런 다음 클래스를 인스턴스화하지 않은 상태, 즉 객체를 생성하지 않고도 이 메서드에 직접 접근하는 것을 확인할 수 있습니다.

예제 코드

class WeekDay:
    day_name = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']

# 클래스 메서드 적용
    @classmethod
    def daynames(n):
        print('The WeekDays are', n.day_name)

WeekDay.daynames()
# 또는 아래와 같이 호출해도 동일하게 동작합니다.
WeekDay().daynames()

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']

classmethod를 사용하지 않는 경우

동일한 결과를 classmethod 없이 얻으려면, 클래스 밖에 일반 함수를 선언하여 호출하면 됩니다. 이 예제를 통해 우리가 왜 클래스 메서드가 필요한지, 그리고 classmethod가 어떤 편의성을 제공하는지 더 명확히 이해할 수 있습니다.

예제 코드

def daynames():
    day_name = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
    print('The WeekDays are', day_name)

daynames()

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

The WeekDays are ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']

정리

일반 함수로도 같은 기능을 구현할 수 있지만, 관련 데이터와 로직을 하나의 클래스 안에 응집시켜 관리하고 싶다면 @classmethod를 활용하는 것이 훨씬 깔끔합니다. 인스턴스 생성 없이 클래스 차원의 데이터나 동작을 다뤄야 할 때 classmethod는 매우 유용한 도구입니다.