Dependency Injection
Dependency injection is a pattern where a chunk of code doesn't directly reference its dependencies. Instead its caller provides the dependencies. This is made possible by the caller and the callee agreeing on contracts for the dependencies.
Doing this allows implementation of the dependencies to be easily swapped out, which is useful for writing unit tests.