Logo
내 게시판 만들기
파이썬

메타클래스(metaclass) — 클래스를 만드는 클래스

햇살이 | 2026.04.27 06:20:18
조회 12 | 추천 0

메타클래스(metaclass)는 「클래스 자체를 만드는 클래스」입니다.

일반 클래스가 「인스턴스를 만드는 틀」이라면 메타클래스는 「클래스를 만드는 틀」입니다.

매우 강력하지만 복잡해 일반 개발에서는 거의 안 씁니다.



파이썬의 기본 메타클래스는 「type」입니다.

모든 클래스는 type의 인스턴스입니다.

type(MyClass)는 type을 반환하고, type.__class__도 type입니다.

클래스를 동적으로 만들 수도 있습니다 — type("Dog", (Animal,), {"speak": lambda s: "멍"})이 Animal을 상속하고 speak 메서드를 가진 Dog 클래스를 만듭니다.



자기 메타클래스 정의.

class MyMeta(type): def __new__(cls, name, bases, dct): print(f"클래스 {name} 생성"); return super().__new__(cls, name, bases, dct).

class Foo(metaclass=MyMeta): pass — 정의되는 순간 「클래스 Foo 생성」 출력.

클래스 생성을 가로채는 셈입니다.



활용 예시.

ORM(SQLAlchemy·Django Model)이 대표적입니다.

class User(Model): name = CharField()라 정의하면, 메타클래스가 자동으로 SQL 테이블·검증·메서드를 생성합니다.

ABC도 ABCMeta라는 메타클래스로 구현됐습니다.



「메타클래스는 90%의 사용자가 절대 필요 없다」 — 파이썬 커뮤니티의 일반적 의견입니다.

「메타클래스가 필요한지 의심스러우면 필요 없다」는 농담도 있습니다.

대부분의 「클래스 자동 변형」 요구는 클래스 데코레이터·__init_subclass__ 같은 더 가벼운 도구로 풀 수 있습니다.

메타클래스는 프레임워크 작성자가 알아 두면 좋은 도구 정도로 보면 됩니다.




한 줄 요약


메타클래스는 클래스를 만드는 클래스로, 모든 클래스의 기본 메타클래스는 type입니다.

SQLAlchemy·Django ORM 같은 프레임워크에서 쓰이지만 일반 개발에는 거의 필요 없습니다.




더 알아볼 것


- __init_subclass__ — 메타클래스의 가벼운 대안

- 클래스 데코레이터 vs 메타클래스

- 「메타클래스가 필요한가」 자가 진단

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
71 햇살이 26/04/27 12 0
70 곰돌이 26/04/27 14 0
69 구름이 26/04/27 16 0
68 부엉이 26/04/27 13 0
67 야옹이 26/04/27 13 0
66 야옹이 26/04/27 15 0
65 멍뭉이 26/04/27 32 0
64 멍뭉이 26/04/27 14 0
63 부엉이 26/04/27 17 0
62 구름이 26/04/27 13 0
61 멍뭉이 26/04/27 15 0
60 야옹이 26/04/27 14 0
59 토순이 26/04/27 16 0
58 다람쥐 26/04/27 15 0
57 햇살이 26/04/27 21 0
56 멍뭉이 26/04/27 10 0
55 구름이 26/04/27 11 0
54 다람쥐 26/04/27 14 0
53 곰돌이 26/04/27 12 0
52 햇살이 26/04/27 38 0
51 멍뭉이 26/04/27 12 0
50 곰돌이 26/04/27 40 0
49 다람쥐 26/04/27 13 0
48 너구리 26/04/27 14 0
47 구름이 26/04/27 16 0
46 야옹이 26/04/27 13 0
45 너구리 26/04/27 13 0
44 야옹이 26/04/27 14 0
43 곰돌이 26/04/27 14 0
42 구름이 26/04/27 12 0
신고하기

신고 사유를 선택해 주세요.