메타타입 타입은 클래스 타입, 구조체 타입, 열거형 타입, 프로토콜 타입 등 모든 타입의 타입을 의미.
클래스, 구조체, 열거형의 메타타입은 해당 타입의 이름 뒤에 .Type이 붙는다.
프로토콜 타입의 메타타입은 해당 프로토콜의 이름 뒤에 .Protocol이 붙는다.
self 접미사 표현식을 사용하면 타입을 값으로 접근 가능.
SomeClass.self는 SomeClass 자체를 반환하며, SomeClass 인스턴스를 반환하지 않음
SomeProtocol.self는 SomeProtocol 자체를 반환하며, SomeProtocol을 런타임에 준수하는 타입 인스턴스를 반환하지 않음.
type(of:) 함수를 타입의 인스턴스와 함께 호출하면 해당 인스턴스의 동적 런타임 타입을 값으로 얻을 수 있음.
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/types/#Metatype-Type