메타타입
메타타입이란 타입의 타입이다. 클래스의 타입, 구조체의 타입, 열거형 타입, 프로토콜의 타입도 메타타입이다.
어떤 클래스 SomeClass의 메타타입은 SomeClass.Type이다.
어떤 프로토콜 SomeProtocol의 메타타입은 SomeProtocol.Protocol이다.
어떤 타입에 .self를 붙이면 해당 타입을 어떤 값으로 접근할 수 있다.
예를 들어 SomeClass.self는 SomeClass의 인스턴스를 리턴하는게 아니라 SomeClass 라는 것 자체를 리턴한다.(프로토콜도 마찬가지)