Why it matters
Pattern matching is one of Scala's biggest productivity wins. It expresses complex conditional logic compactly and safely. Combined with case classes, it enables idiomatic functional programming.
The architecture
Match expression structure: 'x match { case pattern => expr; case _ => default }'. Patterns can be literals ('case 0 =>'), types ('case s: String =>'), constructor destructuring ('case User(name, _) =>'), guards ('case n if n > 0 =>'), or 'or' patterns ('case 1 | 2 =>').
Extractor pattern lets custom objects participate in matching by defining an 'unapply' method. This is how case classes work under the hood.
How it works end to end
Exhaustiveness checking: when matching on a sealed trait, the compiler warns if any subclass is missed. This catches bugs at compile time that runtime tests might miss.
Compiler optimization: match on many literal cases often compiles to a jump table like a C switch. Fast even for many alternatives.
Pattern binding: '@' captures a value while matching. 'case u @ User(_, age) if age > 18 => u.name' matches, captures u, and uses it in the body.