@classmethod는 클래스 메서드를 정의할 때 사용하는 데코레이터!
이 메서드는 클래스 자체(cls) 를 첫 번째 인자로 받아, 인스턴스가 아닌 클래스 수준에서 작동함.
🔁 일반 메서드 vs 클래스 메서드
| 종류 | 첫 번째 인자 | 호출 대상 | 용도 |
|---|---|---|---|
| 일반 메서드 | self | 인스턴스 | 인스턴스의 상태를 다룰 때 |
| 클래스 메서드 | cls | 클래스 | 클래스 상태나 클래스 관련 로직 처리 시 |
Pydantic v2에서 @field_validator는 클래스 메서드로 작성해야 하기 때문에 @classmethod가 필요함.
즉, 다음과 같이 두 데코레이터를 함께 써야 한다:
@field_validator('price')
@classmethod
def validate_price(cls, value):
...
cls: Item 클래스 자체를 의미
Pydantic이 내부적으로 클래스 컨텍스트에서 이 함수를 호출하므로, @classmethod가 반드시 필요