[Python] Class 알아보기 (2) - 클래스 메서드와 정적 메서드

orangesnail·2025년 3월 7일

Python

목록 보기
14/21

클래스 메서드와 정적 메서드

1️⃣ 클래스 메서드

앞서 클래스 변수에 대해 알아봤다. 이 클래스 변수는 해당 클래스에서 만들어진 모든 인스턴스가 공유하기 때문에 한 번 수정하면 만들어진 모든 인스턴스에 영향을 준다.

클래스 변수를 쉽게 관리하기 위해 사용하는 것이 클래스 메서드이다. @classmethod 아래에 메서드를 작성해주면 된다.

클래스 메서드를 사용하지 않는 경우

class Drink:
    price = "20$"

    def setPrice(self, newPrice):
        self.__class__.price = newPrice

drink1 = Drink()
drink2 = Drink()

drink1.setPrice("30$")

Drink 클래스로 만들어진 drink1, drink2 인스턴스의 price 변수를 수정해주기 위해서는 self.__class__.price를 사용해야 한다. 뭔가 코드가 길고 복잡해보인다...

클래스 메서드를 사용하면?

class Drink:
    price = "20$"

    @classmethod
    def setPrice(cls, newPrice):
        cls.price = newPrice

drink1 = Drink()
drink2 = Drink()

Drink.setPrice("30$")

self.__class__.price부분이 cls.price 로 훨씬 간단하고 깔끔하게 바뀌었다!
또한 마지막 줄과 같이 객체를 생성하지 않고도 클래스 변수를 수정할 수 있다.

2️⃣ 정적 메서드

@staticmethod 아래에 메서드를 작성한다.
정적 메서드는 클래스와 관련된 독립적인 기능을 만들 때 사용한다. 즉, 클래스 내부에 있어야 되긴 하는데 클래스 변수나 인스턴스를 사용하지 않는 메서드를 말한다.

일반적인 함수로 만들어도 되지만, 클래스 안에 있어야지 더 직관적으로 보이는 함수들이 있다. 이를 위해 정적 메서드를 사용한다.

예를 들면 a와 b를 파라미터로 받아 a+b를 리턴하는 add 함수를 만든다고 치자. 물론 그냥 만들수도 있지만, MathUtils 클래스 안에 넣어서 조금 더 직관적으로 표현할 수 있다.

class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b
    
print(MathUtils.add(1, 2))
profile
초보입니다. 피드백 환영합니다 😗

0개의 댓글