📌 @staticmethod는 무엇인가요?
Python에서 @staticmethod는 데코레이터(decorator) 중 하나로, 클래스 내부에서 정의되지만 인스턴스(self)와 무관하게 동작하는 메서드를 만들 때 사용합니다.
✅ 데코레이터란?
데코레이터는 기능을 꾸며주는 문법입니다.
@ 기호를 사용해 함수나 메서드에 특별한 의미를 부여할 수 있어요.
예시:
@staticmethod
이 줄은 바로 아래의 함수에 "정적 메서드" 기능을 입혀주는 것입니다.
🎯 @staticmethod가 필요한 이유
일반적으로 클래스 내부의 메서드는 self를 인자로 받습니다:
def method(self):
pass
하지만, 클래스 내부에서 단순한 유틸리티 함수나 내부 도구로 쓰는 함수라면 self가 필요하지 않죠.
이럴 때 사용하는 것이 바로 @staticmethod입니다.
✅ 사용 예제
import random, string
class ShortURL:
@staticmethod
def generate_code():
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for _ in range(8))
이 메서드는 self 없이 호출 가능합니다:
ShortURL.generate_code() # ✅ OK
🔍 일반 메서드 vs staticmethod
구분 일반 메서드 staticmethod
첫 번째 인자 | self (인스턴스) | 없음 |
호출 방식 | obj.method() | obj.method() or Class.method() |
용도 | 인스턴스 상태를 다룸 | 단순 도구 함수, 유틸리티 로직 |
🧠 언제 사용하나요?
상황 사용 여부
인스턴스 상태를 참조해야 함 | ❌ 사용하지 않음 |
클래스 변수만 사용할 경우 | @classmethod 고려 |
독립적인 로직 처리 (예: 랜덤 코드 생성) | ✅ @staticmethod 적합 |
⚠️ 주의사항
- @staticmethod는 클래스나 인스턴스 상태를 전혀 알 수 없습니다.
- 단순 기능 제공에만 사용하세요.
📌 요약
- @staticmethod는 클래스 내부에 정의되지만 self가 필요 없는 함수에 사용
- 클래스 인스턴스 없이도 호출 가능 (ClassName.method())
- 순수 유틸성 함수에 적합 (예: 랜덤코드 생성, 포맷팅, 계산 등)
💡 정적 메서드는 "이 클래스 안에 속하지만, 이 객체와 무관한 기능"이라는 것을 명확히 보여주는 방식입니다.
궁금하다면 @classmethod와 비교한 정리도 추가로 알려드릴 수 있어요!
'기술블로그-Django편' 카테고리의 다른 글
🔄 클래스/함수 이름 변경 시 꼭 써야 할 리팩토링 기능 (Refactor → Rename) (0) | 2025.05.15 |
---|---|
✅ Django DRF에서 Serializer 유효성 검사, 내부 구조까지 완전 정복! (0) | 2025.05.15 |
📌 Django에서 DRF 사용 시 Serializer가 꼭 필요한 이유 (0) | 2025.05.15 |
📌 Django REST Framework(DRF)란? (0) | 2025.05.15 |
🧠 Django 클래스 기반 뷰(CBV)의 속성들, 왜 쓰는지 헷갈린다면? (0) | 2025.05.15 |