본문 바로가기
Programming

Python의 `classmethod`: 클래스 메서드

by 느리게 걷는 즐거움 2024. 6. 9.
반응형

Python의 `classmethod`: 클래스 메서드란 무엇인가?

Python의 클래스 메서드(`classmethod`)는 인스턴스 메서드와 정적 메서드 사이의 중간 지점에 위치한 특수한 메서드입니다. 클래스 메서드는 클래스 자체를 첫 번째 인자로 받으며, 클래스 상태를 조작하거나 클래스 레벨에서 동작하는 메서드를 정의하는 데 사용됩니다. 이 글에서는 `classmethod`의 개념, 사용법, 그리고 활용 사례에 대해 자세히 알아보겠습니다.

클래스 메서드의 정의와 사용법

클래스 메서드는 `@classmethod` 데코레이터를 사용하여 정의합니다. 첫 번째 인자로 클래스 자체를 나타내는 `cls`를 받습니다. 이는 인스턴스 메서드가 첫 번째 인자로 `self`를 받는 것과 유사합니다.

class MyClass:
    class_variable = 0

    @classmethod
    def class_method(cls):
        cls.class_variable += 1
        return cls.class_variable

위의 예시에서 `class_method`는 클래스 메서드로 정의되었으며, `cls`를 사용하여 클래스 변수를 수정합니다. 이를 통해 클래스의 모든 인스턴스에서 공유되는 상태를 조작할 수 있습니다.

클래스 메서드와 인스턴스 메서드의 차이점

인스턴스 메서드**: 인스턴스 메서드는 객체의 인스턴스에서 호출되며, 첫 번째 인자로 `self`를 받아 인스턴스 상태(인스턴스 변수)를 조작합니다.

클래스 메서드**: 클래스 메서드는 클래스 자체에서 호출되며, 첫 번째 인자로 `cls`를 받아 클래스 상태(클래스 변수)를 조작합니다.

클래스 메서드의 활용 사례

팩토리 메서드: 클래스 메서드는 여러 가지 방법으로 객체를 생성하는 팩토리 메서드로 자주 사용됩니다.

class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    @classmethod
    def from_string(cls, date_string):
        year, month, day = map(int, date_string.split('-'))
        return cls(year, month, day)

# Usage
date1 = Date(2023, 6, 9)
date2 = Date.from_string('2023-06-09')

상태 유지: 클래스 메서드는 클래스 상태를 유지하고 조작하는 데 유용합니다.

class Counter:
    count = 0

    @classmethod
    def increment(cls):
        cls.count += 1
        return cls.count

# Usage
print(Counter.increment())  # Output: 1
print(Counter.increment())  # Output: 2

결론

클래스 메서드는 클래스 레벨에서 동작하는 메서드를 정의할 수 있게 해주는 강력한 도구입니다. 이를 통해 팩토리 메서드, 클래스 상태 유지, 상속된 클래스에서의 공통 동작 정의 등 다양한 활용이 가능합니다. `classmethod`를 이해하고 적절히 사용하면, 더 구조적이고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 클래스 메서드를 활용하여 Python의 객체 지향 프로그래밍을 한 단계 더 발전시켜보세요!

반응형

'Programming' 카테고리의 다른 글

minicom Lock 에러 대처법  (0) 2024.06.10
Axios?  (1) 2024.06.09
JWT (JSON Web Token)?  (0) 2024.06.09
MongoDB와 SQL: 명령어 비교  (0) 2024.06.09
C++ 람다 함수  (0) 2024.06.07