A Profile is a group of one to many modules. Its parameters override the modules parameters and can get override by a Blueprint parameters.
Profiles abstract modules, as blueprints abstract profiles. This abstraction ensures flexibility and provides reusability of pieces of software across your infrastructure.
Read more about how abstraction of modules works here.