-
[Python] 메타클래스와 속성언어/파이썬 & 장고 2016. 10. 29. 16:07
메타클래스는 파이썬의 기능목록에서 자주 언급되지만 실제로 메타클래스가 무엇을 하는지 이해하는 사람은 소수에 불과합니다. 메타클래스라는 이름은 어렴풋이 클래스 위에 있고 클래스를 넘어선다는 개념을 암시합니다. 간단히 설명하면 메타클래스를 이용하면 파이썬의 class문을 가로채서 클래스가 정의될 때마다 특별한 동작을 제공할 수 있습니다.
속성 접근을 동적으로 사용자화하는 파이썬의 강력한 내장 기능이 있습니다. 파이썬의 객체 지향 구조와 함께 이용하면 이 기능들은 간단한 클래스를 복잡한 클래스로 쉽게 바꿔주는 훌륭한 도구가 됩니다.
그러나 이런 강력한 기능에는 많은 함정이 있습니다. 동적 속성은 객체들을 오버라이드하다가 예상치 못한 부작용을 일으키게 할 수 있습니다. 메타클래스는 처음 접하는 사람은 도저히 이해할 수 없는 극도로 이상한 동작을 만들어내기도 합니다. 그러므로 최소 놀람 규칙(rule of least surprise - 놀랄 만한 것은 최소한으로 사용하라는 뜻) 을 따르고 제대로 이해하고 있는 이디엄을 구현하는 데만 이런 메커니즘을 이용해야 합니다.