백엔드 개발 · 심화
Python에서 메타클래스(Metaclass)는 언제, 어떤 목적으로 사용되며, 이를 활용한 실제 설계 패턴의 예시를 들어 설명해주세요. `type()` 함수와의 관계도 함께 설명해주세요.
힌트 · 클래스의 클래스로서 런타임에 클래스 생성/수정, ORM 매핑, 플러그인 시스템 등 특정 규칙을 강제하는 용도로 활용될 수 있습니다.
클래스 생성 제어클래스 커스터마이징type싱글톤 패턴ORM
모범답안
메타클래스는 "클래스의 클래스"라고 생각하시면 됩니다. 즉, 클래스를 만드는 역할을 하는 클래스죠. 파이썬에서 클래스는 type()이라는 메타클래스의 인스턴스입니다.
메타클래스는 클래스가 생성될 때 그 생성 과정을 제어하거나, 클래스의 속성을 동적으로 변경하고 싶을 때 사용합니다. 예를 들어, 모든 클래스가 특정 속성을 반드시 가지도록 강제하거나, 싱글톤 패턴을 구현하거나, ORM에서 데이터베이스 테이블과 클래스를 매핑하는 등의 작업을 할 수 있습니다.
싱글톤 패턴을 예로 들면, 메타클래스를 사용하여 클래스의 인스턴스가 단 하나만 생성되도록 제어할 수 있습니다. type() 함수는 클래스의 타입을 반환하는 동시에, 동적으로 클래스를 생성하는 데에도 사용될 수 있습니다. 메타클래스를 사용하면 클래스 생성 시점에 원하는 로직을 추가하여 클래스를 더욱 유연하고 강력하게 만들 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Python 면접 질문
- Python의 __slots__의 용도와 사용 시 이점은 무엇인가요?
- Python의 descriptor란 무엇이며, 어떻게 동작하나요?
- Python의 GIL(Global Interpreter Lock)이 멀티스레딩 기반 동시성 프로그래밍에 미치는 영향과 이를 극복하기 위한 대표적인 전략들을 설명하고, 각 전략의 장단점을 비교하여 설명해주세요.
- Python의 디스크립터(Descriptor) 프로토콜은 무엇이며, `__get__`, `__set__`, `__delete__` 메서드가 어떻게 동작하는지 설명해주세요. 또한, 실제 코드에서 디스크립터를 활용하여 속성 접근을 제어하는 실용적인 예시를 제시해주세요.