Events and hooks
In Drupal 8, there are two methods of responding to interacting with the system and other modules. The first is the normal hook system that is the same as previous versions of Drupal. The second is the event system using the Symfony EventDispatcher. The EventDispatcher system is still new to Drupal, so there aren't many places in Drupal that can use it and you'll find yourself using hooks for a lot of things still. You can see a list of the ones available at https://api.drupal.org/api/drupal/core!core.api.php/group/events/8. But the EventDispatcher is definitely the future of interacting with the Drupal system.
Using the EventDispatcher
An event listener is first and foremost just another type of service. This gives you the advantage of being able to isolate your event listener and use dependency injection. This gives you an ease of unit testing that the normal hook system cannot provide. You can create an event listener manually or use the Drupal Console to do by it by running...