Interface defines a set of methods on a struct. It defines behavior.
Interface cannot define data.
It allows functions to accept multiple implementation of the same functionality.
This is similar (but not identical) to the notion of virtual methods in C++.