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++.

https://codeeval.dev/gist/834d151ef15e807742f004be6a050608