Protocols (often named “interfaces” in other languages) are a set of functions and variables that can be implemented by any class or struct. Since protocols are not bound to a specific class, it’s possible to use any class for a protocol reference as long as it implements it. This makes it much more flexible.