기술블로그-Django편
📌 Python 오버라이딩(Overriding) 완전 정복 - 개념, 예시, Django 실전 활용까지
Chansman
2025. 5. 8. 13:24
📌 Python 오버라이딩(Overriding) 완전 정복 - 개념, 예시, Django 실전 활용까지
✅ 1. 오버라이딩(Overriding)이란?
오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 "다시 정의"하는 것입니다.
- 같은 이름의 메서드를 자식 클래스에서 새롭게 작성함으로써,
- 기존 동작을 재정의하거나 확장할 수 있습니다.
🔁 즉, 기존 기능을 내가 원하는 방식으로 덮어쓴다고 이해하면 됩니다.
✅ 2. 오버라이딩 기본 예시 (동물 클래스)
class Animal:
def sound(self):
return "동물이 소리를 냅니다"
class Dog(Animal):
def sound(self): # 오버라이딩
return "멍멍"
dog = Dog()
print(dog.sound()) # 출력: "멍멍"
➡️ 부모 클래스 Animal의 sound()를 자식 클래스 Dog가 다시 정의(오버라이딩) 했습니다.
✅ 3. 오버라이딩과 super()
자식 클래스에서 오버라이딩하면서도 부모 클래스의 기능을 그대로 유지하고 싶을 때는 super()를 사용합니다.
class Cat(Animal):
def sound(self):
original = super().sound()
return original + " + 야옹"
cat = Cat()
print(cat.sound()) # 출력: "동물이 소리를 냅니다 + 야옹"
✅ 4. Django에서 오버라이딩이 필요한 이유
Django의 CBV(Class-Based View)는 부모 클래스에 다양한 메서드가 이미 정의되어 있습니다.
우리는 그중 일부만 오버라이딩해서 커스터마이징합니다.
예: 글 작성자만 상세 보기 허용
class BlogDetailView(DetailView):
model = Blog
template_name = 'blog_detail.html'
def get_object(self, queryset=None): # 오버라이딩
obj = super().get_object()
if obj.author != self.request.user:
raise Http404 # 권한 없으면 404
return obj
✅ 5. 오버라이딩의 주요 활용 예
메서드 사용 목적
get() | GET 요청에 대한 응답 수정 |
post() | POST 요청 처리 커스터마이징 |
get_queryset() | DB 조회 범위 제한 (ex. 본인 글만 보기) |
get_object() | 특정 객체 조회 방식 수정 (ex. 권한 체크) |
form_valid() | 폼 저장 전 추가 로직 수행 (ex. 작성자 자동 할당) |
✅ 6. 오버라이딩 vs 오버로딩
항목 오버라이딩 오버로딩 (Python은 직접 지원 X)
정의 | 부모의 메서드를 다시 정의 | 하나의 이름으로 매개변수 다르게 여러 함수 정의 |
목적 | 기존 기능 재정의 | 다양한 인자를 처리하는 유연한 함수 제공 |
예시 | def get(self): | def add(a, b) / def add(a, b, c) |
✅ 7. 결론 정리
오버라이딩은 기존 동작을 바꾸거나 확장하고 싶을 때 사용하는 필수 기술입니다.
- Django의 CBV에서는 거의 모든 실무 로직이 오버라이딩을 통해 구현됩니다.
- super()를 함께 사용하면 부모 동작을 유지하면서 커스터마이징 가능!
💬 다음에는 get_queryset()이나 form_valid() 같은 실전 오버라이딩 예제도 정리해드릴게요!