백엔드 개발 · 심화
Python의 descriptor란 무엇이며, 어떻게 동작하나요?
힌트 · __get__, __set__, __delete__ 메서드를 설명해보세요.
attribute 접근getsetdelete데이터 캡슐화
모범답안
Python의 descriptor는 객체 속성(attribute) 접근 방식을 제어하는 메커니즘입니다. 간단히 말해, 속성에 접근할 때 특별한 동작을 수행하도록 해주는 것이죠.
descriptor를 구현하려면 클래스에 __get__, __set__, __delete__ 중 하나 이상의 메서드를 정의해야 합니다.
__get__(self, instance, owner): 속성 값을 가져올 때 호출됩니다.__set__(self, instance, value): 속성 값을 설정할 때 호출됩니다.__delete__(self, instance): 속성을 삭제할 때 호출됩니다.
이 메서드들을 통해 속성 접근, 설정, 삭제 시점을 가로채서 원하는 로직을 실행할 수 있습니다. 예를 들어, 데이터 유효성 검사나 읽기 전용 속성 구현 등에 활용할 수 있습니다. descriptor를 사용하면 속성 접근을 캡슐화하고 더 유연하고 제어 가능한 코드를 작성할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Python 면접 질문
- Python의 딕셔너리 내부 구현과 해시 충돌 처리 방식을 설명해주세요.
- Python의 metaclass란 무엇이며, 어떤 상황에서 사용하나요?
- Python의 __slots__의 용도와 사용 시 이점은 무엇인가요?
- Python의 GIL(Global Interpreter Lock)이 멀티스레딩 기반 동시성 프로그래밍에 미치는 영향과 이를 극복하기 위한 대표적인 전략들을 설명하고, 각 전략의 장단점을 비교하여 설명해주세요.
- Python에서 메타클래스(Metaclass)는 언제, 어떤 목적으로 사용되며, 이를 활용한 실제 설계 패턴의 예시를 들어 설명해주세요. `type()` 함수와의 관계도 함께 설명해주세요.
- Python의 디스크립터(Descriptor) 프로토콜은 무엇이며, `__get__`, `__set__`, `__delete__` 메서드가 어떻게 동작하는지 설명해주세요. 또한, 실제 코드에서 디스크립터를 활용하여 속성 접근을 제어하는 실용적인 예시를 제시해주세요.