A Domain Specific Language (DSL) is a programming language focused on a particular problem domain. DSLs provide expressive notations and abstractions for their domain through appropriate syntax and semantics. Groovy enables the creation of DSLs through features like closures, builders, open classes, and AST transformations that allow customizing and extending the language.