210701 TIL

Python

metaclass

메타클래스는 클래스를 만들기 위한 것.
예를 들어 클래스는 인스턴스를 만들기 위한 것이었다면,
메타클래스는 클래스를 만들기 위한 것이다.
붕어빵을 만들기 위한 틀을 만들기 위한 틀이랄까...
재밌는 점은 클래스 또한 일급객체 취급을 할 수 있다는 것이다.
그리고 모든 클래스들의 메타클래스는 type이며 type 또한 type에 의해 생성된다.
아버지들의 아버지 느낌이다.

메타 클래스를 이용하면 동적으로 클래스를 생성하여 내 마음대로 커스터마이징이 가능하고
상속을 받을 수 있고, 네임스페이스에 넣을 값들을 부여받을 수 있다. 어찌보면...
클래스 상속과 비슷한 느낌이긴 한데,,,
조금 더 low-level에서 작성한다는 느낌이 들긴 한다.
아직 실무에서 적용해보지 않아서 확 와닿지는 않지만 써먹어볼만 해보인다.
클래스의 동작을 제어하기 위해 주로 사용한다고 한다.
싱글톤 패턴으로 클래스를 제어할때 사용하는 예시가 있는데 적절했던 것 같다.
개념적으로는 다르지만 결국 하고 싶은거는 굳이 메타클래스를 이용하지 않아도 가능하다.
그래서 혹자는 "메타클래스는 파이썬 이용자의 99%는 몰라도 되며, 꼭 써야되는 사람은 자기 자신이 왜 꼭 써야하는지 알고 있다" 라고 언급했었다.

그러게.. 굳이 안써도 되면 뭐 안써도 되는건데 써봐도 괜찮을거 같기도 하고(그럼 쓰지 않아야한다는 얘기인데...).... 그냥 상속 받아서 새로운 클래스 정의 해서 써도 괜찮은데?

type이 단순히 함수인 줄 알았는데 단순한 놈이 아니었다는 것에 놀라울 따름이다.

잠깐의 강의로 확 와닿게 이해한 것은 아니지만 그런 기능이 구현되어 있다는 것은 확실히 알게 되었다.

오늘 배운 내용은 약간의 맛보기 정도 인듯 싶다.

파이썬에 대해 어느 정도 알고 있다고 생각했는데 아직도 배워야할게 많다.

댓글을 작성해보세요.

채널톡 아이콘