백엔드 개발 · 심화
Python의 metaclass란 무엇이며, 어떤 상황에서 사용하나요?
힌트 · 클래스를 생성하는 클래스와 Django ORM의 예시를 생각해보세요.
클래스 생성클래스의 클래스클래스 커스터마이징ORM싱글톤
모범답안
면접관님, Python의 metaclass는 "클래스를 만드는 클래스"라고 생각하시면 됩니다. 일반적인 클래스가 객체를 생성하는 것처럼, metaclass는 클래스 자체를 생성하는 역할을 합니다.
클래스가 정의될 때, Python은 metaclass를 사용하여 해당 클래스를 생성합니다. 기본적으로 type이라는 metaclass가 사용되죠. metaclass를 사용하면 클래스가 생성되는 과정을 가로채서 클래스의 속성이나 메서드를 동적으로 변경하거나, 클래스 생성 로직 자체를 커스터마이징할 수 있습니다.
주로 클래스 정의를 제어하거나, 특정 패턴을 강제해야 할 때 사용합니다. 예를 들어, Django ORM에서 모델 클래스를 정의할 때, metaclass를 사용하여 데이터베이스 필드를 자동으로 매핑하거나, 싱글톤 패턴을 구현할 때 활용할 수 있습니다.
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class MyClass(metaclass=Singleton):
pass
위 예시는 싱글톤 패턴을 metaclass로 구현한 간단한 예시입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Python 면접 질문
- Python의 asyncio와 비동기 프로그래밍에 대해 설명해주세요.
- Python의 메모리 관리와 가비지 컬렉션 동작 방식에 대해 설명해주세요.
- Python의 딕셔너리 내부 구현과 해시 충돌 처리 방식을 설명해주세요.
- Python의 __slots__의 용도와 사용 시 이점은 무엇인가요?
- Python의 descriptor란 무엇이며, 어떻게 동작하나요?
- Python의 GIL(Global Interpreter Lock)이 멀티스레딩 기반 동시성 프로그래밍에 미치는 영향과 이를 극복하기 위한 대표적인 전략들을 설명하고, 각 전략의 장단점을 비교하여 설명해주세요.