1. 메타(Meta)라는 말의 뜻
- **“한 단계 위에서 바라본다”**는 의미
- IT에서 "메타"는 보통 **데이터를 설명하는 데이터(메타데이터)**처럼 “상위 개념”을 가리킬 때 씁니다.
그렇다면, 메타클래스는 클래스를 설명하고 제어하는 클래스입니다
1. 객체, 클래스, 메타클래스 관계
파이썬에서 모든 것은 객체입니다.
- 객체(Object): 데이터와 기능을 가지는 실체
- 클래스(Class): 객체를 만드는 설계도
- 메타클래스(Metaclass): 클래스를 만드는 설계도
즉 구조는 이렇게 됩니다:
객체 → 클래스로부터 생성
클래스 → 메타클래스로부터 생성
2. 객체, 클래스, 메타클래스 관계 (순서도)
파이썬에서의 관계를 한 눈에 볼 수 있도록 순서도로 표현하면 아래와 같습니다.
[메타클래스(Metaclass)]
↓ 클래스를 만든다
[클래스(Class)]
↓ 객체(인스턴스)를 만든다
[인스턴스(Instance, Object)]
- 메타클래스는 클래스를 만드는 공장
- 클래스는 객체를 만드는 설계도
- **객체(인스턴스)**는 클래스에서 실제로 찍어낸 결과물
3. 기본 메타클래스는 type
파이썬에서는 모든 클래스가 기본적으로 type의 인스턴스입니다.
class Foo:
pass
print(type(Foo)) # <class 'type'>
Foo라는 클래스도 사실은 type이라는 메타클래스가 만들어낸 "객체"예요.
즉, 우리가 객체를 만드는 것처럼, 클래스도 만들어지는 대상일 뿐입니다.
4. 메타클래스를 왜 쓸까?
- 클래스 생성 과정을 제어하고 싶을 때
- 자동 규칙 적용: 속성 강제, 인터페이스 체크
- 프레임워크 내부 동작: Django ORM, ABC(Abstract Base Class) 등
예를 들어, Django에서는 models.Model의 메타클래스를 이용해 데이터베이스 테이블과 모델 클래스를 자동으로 연결합니다.
간단한 예제
# 메타클래스 정의
class Meta(type):
def __new__(cls, name, bases, dct):
print(f"{name} 클래스가 생성됩니다!")
return super().__new__(cls, name, bases, dct)
# 메타클래스를 사용하는 클래스
class MyClass(metaclass=Meta):
pass
# 실행 결과:
# MyClass 클래스가 생성됩니다!
MyClass가 정의되는 순간, Meta라는 메타클래스가 개입해 메시지를 출력합니다.
정리하면
- 객체는 클래스의 인스턴스
- 클래스는 메타클래스의 인스턴스
- 파이썬의 기본 메타클래스는 type
- 필요하면 type을 상속해 직접 만든 커스텀 메타클래스를 사용할 수 있다
메타클래스는 “클래스를 제어하고 만드는 클래스”다.
프레임워크나 라이브러리에서 자주 활용되지만, 일반적인 개발에서는 직접 정의할 일은 드뭅니다. 대신 “클래스도 객체고, 그 뒤에는 type이 있다”는 철학만 이해해도 큰 도움이 됩니다.
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
| 파이썬 메타클래스로 커스텀 리스트 만들기 (0) | 2025.09.15 |
|---|---|
| Python type()을 이용한 동적 클래스 생성 가이드 (0) | 2025.09.15 |
| 파이썬에서의 메소드 오버로딩 (multipledispatch 활용) (0) | 2025.09.14 |
| 파이썬 언더스코어(_)의 의미와 활용 (0) | 2025.09.14 |
| 메모리를 아끼는 파이썬 데이터 처리 비법 — map, filter, reduce (0) | 2025.09.13 |